0
我正在使用以下代码来获取触摸事件,绘制路径并将其存储在ArrayList中并且它正在工作。Android - 保存路径并稍后绘制
@Override
public boolean onTouchEvent(MotionEvent event) {
float touchX = event.getX();
float touchY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
drawPath.moveTo(touchX, touchY);
break;
case MotionEvent.ACTION_MOVE:
drawPath.lineTo(touchX, touchY);
drawCanvas.drawPath(drawPath, drawPaint);
paths.add(drawPath);
drawPath.reset();
drawPath.moveTo(touchX, touchY);
break;
case MotionEvent.ACTION_UP:
drawCanvas.drawPath(drawPath, drawPaint);
paths.add(drawPath);
drawPath.reset();
break;
default:
return false;
}
invalidate();
return true;
}
当我想再次绘制它,但使用不同的颜色,它不起作用。如果我创建路径,如评论,它的工作原理:■
public void printPath(){
Path testePath = new Path();
//testePath.moveTo(0, 0);
//testePath.lineTo(300, 300);
Paint testePaint = new Paint();
testePaint.setColor(0xFF00FF00);
testePaint.setAntiAlias(true);
testePaint.setStrokeWidth(brushSize);
testePaint.setStyle(Paint.Style.STROKE);
testePaint.setStrokeJoin(Paint.Join.ROUND);
testePaint.setStrokeCap(Paint.Cap.ROUND);
testePath = paths.remove(0);
drawCanvas.drawPath(testePath, testePaint);
}
如何创建数学:
public class DrawingView extends View {
//drawing path
private Path drawPath;
//drawing and canvas paint
private Paint drawPaint, canvasPaint;
//initial color
private int paintColor = 0x00660000;
//canvas
private Canvas drawCanvas;
//canvas bitmap
private Bitmap canvasBitmap;
private float brushSize, lastBrushSize;
private ArrayList<Path> paths;
private boolean erase=false;
public DrawingView(Context context, AttributeSet attrs) {
super(context, attrs);
setupDrawing();
}
private void setupDrawing(){
brushSize = getResources().getInteger(R.integer.medium_size);
lastBrushSize = brushSize;
//get drawing area setup for interaction
drawPath = new Path();
drawPaint = new Paint();
drawPaint.setColor(paintColor);
drawPaint.setAntiAlias(true);
drawPaint.setStrokeWidth(brushSize);
drawPaint.setStyle(Paint.Style.STROKE);
drawPaint.setStrokeJoin(Paint.Join.ROUND);
drawPaint.setStrokeCap(Paint.Cap.ROUND);
drawPaint.setAlpha(150);
canvasPaint = new Paint(Paint.DITHER_FLAG);
paths = new ArrayList<Path>();
}
...
嗯,所以我保存在arraylist上的路径是一个引用而不是变量? 我用我创建我的路径的方式更新我的问题。 –
是的,它是任何其他java对象的引用:)您可以使用复制构造函数在存储它之前复制新路径中的路径 –
谢谢,现在我正在做它像paths.add(新路径(drawPath ));它工作:) –