我正在使用手指移动在 android Canvas 中绘制闭合路径。这是我的代码
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
startPoint = new PointF(event.getX(), event.getY());
endPoint = new PointF();
hotSpot = new HotSpots();
endPoint.x = event.getX();
endPoint.y = event.getY();
wallpath = new Path();
wallpath.moveTo(endPoint.x,endPoint.y);
break;
case MotionEvent.ACTION_MOVE:
PointF point = new PointF(event.getX(),event.getY());
endPoint.x = event.getX();
endPoint.y = event.getY();
invalidate();
break;
case MotionEvent.ACTION_UP:
endPoint.x = startPoint.x;//event.getX();
isFinished = true;
break;
default:
break;
}
@Override
protected void onDraw(Canvas canvas)
{
wallpath.lineTo(endPoint.x, endPoint.y);
canvas.drawPath(wallpath, paint);
if(isFinished)
{
wallpath.lineTo(endPoint.x, endPoint.y);
canvas.drawPath(wallpath, paint);
}
}
在每次新触摸时,我都在创建一条新路径。但是当绘制新路径时,旧路径将被删除。如何在 Canvas 上绘制多条路径,每条路径填充颜色不同。
最佳答案
当 ACTION_DOWN 是触发事件时,您将使用 wallpath = new Path() 语句重置 wallpath,放弃之前的值。这条新路径是 onDraw 方法中唯一绘制的内容,每次需要重绘 Canvas 时都会调用该方法。
考虑构建路径列表,当触发事件 ACTION_DOWN 时向列表添加新路径,并在 onDraw 方法中绘制列表中的每条路径。
详细信息:
在代码的其他地方,添加:
pathList = new ArrayList<Path>;
在 ACTION_DOWN 情况下,添加一行:
wallpath = new Path();
pathList.add(wallpath); // <-- Add this line.
在 ACTION_MOVE 情况下:
endPoint.x = event.getX();
endPoint.y = event.getY();
wallpath.lineTo(endPoint.x, endPoint.y); // <-- Add this line.
最后,将 onDraw 方法中的代码替换为以下代码:
for (Path path : pathList) {
canvas.drawPath(path, paint);
}
删除条件,这是不必要的。
关于java - 在android中绘制多条路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18592169/