2014-01-27 45 views
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>(); 
    } 
    ... 

回答

4

它不工作,因为你一直重置路径。 删除drawPath.reset();否则当您尝试绘制它时,路径将为空。

+0

嗯,所以我保存在arraylist上的路径是一个引用而不是变量? 我用我创建我的路径的方式更新我的问题。 –

+1

是的,它是任何其他java对象的引用:)您可以使用复制构造函数在存储它之前复制新路径中的路径 –

+0

谢谢,现在我正在做它像paths.add(新路径(drawPath ));它工作:) –