2014-01-27 5 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; 
} 

После того, как я хочу нарисовать его снова, но с другим цветом, и он не работает. Если я создаю путь, так прокомментировал это работает: S

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

hmm, так путь, который я сохраняю на arraylist, является ссылкой, а не переменной? Я обновляю свой вопрос так, как я создаю свой путь. –

+1

Да, это ссылка как любой другой объект Java. Вы можете использовать конструктор копирования, чтобы скопировать путь в новый путь до его сохранения. –

+0

Спасибо, сейчас я делаю это как paths.add (new Path (drawPath))); и это работает :) –

Смежные вопросы