这个问题已经在这里有了答案:
已关闭8年。
我是Android和Java编程的新手,并且一直在从事移动应用程序开发。我最近创建了一个 View ,该 View 仅使绘制线条与用户的手指移动保持一致。但是,我在使用Canvas.drawLines方法时遇到了一些麻烦。
与其在所有点之间得到连续的线,不如说我得到的是虚线在线段之间具有断点的虚线:
以下是一组数据示例和用于重现此问题的简单代码(点数据来自真实的手指划动):
public class SomeView extends android.view.View
{
private float[] _data = { 292.36545f, 104.37576f, 285.3567f, 112.39249f, 274.34293f, 113.39456f, 254.3179f, 115.39874f, 248.3104f, 116.40082f, 228.28535f, 118.405f, 214.26784f, 119.407104f, 211.26408f, 119.407104f, 204.25533f, 120.40918f, 202.25282f, 120.40918f, 201.25157f, 121.411255f, 199.24907f, 124.41754f, 197.24657f, 125.41962f, 196.24532f, 130.43005f, 195.24406f, 139.44885f, 197.24657f, 144.45929f };
private Paint _paint;
public SomeView( Context c, AttributeSet attrs)
{
super( c, attrs );
_paint = new Paint();
_paint.setColor(Color.BLUE);
_paint.setStrokeWidth(6);
}
@Override
public void onDraw(Canvas canvas)
{
canvas.drawLines( _data, _paint);
}
}
在绘制完每个点并将其覆盖在直线上之后,我意识到问题实际上是每个点都没有连接,只有每两个点都没有连接。如下所示,该方法不是将点1连接到点2连接到点3,依此类推,而是将1连接到2,然后将3连接到4:
我可以通过再次绘制调用
drawLines
并提供一次偏移量来几乎得到我想要的东西,以便将其他对也绘制在一起,但是这对我来说似乎效率不高且笨拙,而且线条仍然不完全平滑(得到拐角处有些断断续续)。所以,我的问题是;我在做什么错,在给定一些点的情况下,如何绘制一条简单,平滑的线?哎呀,如果有更好的方法可以用一条线“我全是耳朵”来追踪用户的手指,那就别忘了要点。提前致谢。
最佳答案
您得到的正是 drawLines
文档中指定的内容。
一种执行所需操作的方法是从该数据构造一个 Path
,并使用drawPath
而不是drawLines
。就像是:
Path _path = new Path();
_path.moveTo(_data[0], _data[1]);
for (int i=2; i<_data.length; i+=2) {
_path.lineTo(_data[i], _data[i+1]);
}
然后用:
_canvas.drawPath(_path, _paint)
从
Path
文档:因此,您可能必须更改自己的绘画风格才能获得正确的效果。
关于java - Canvas.drawLines显示不连续的线段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6167236/