2014-01-27 4 views
0

다음 코드를 사용하여 터치 이벤트를 가져 와서 패스를 그리고 ArrayList에 저장하면 작동합니다.안드로이드 - 경로를 저장하고 나중에 그립니다

@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); 
} 

S :

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 (newPath (drawPath)); 그리고 그것은 작동합니다 :) –

관련 문제