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>();
}
...
hmm, так путь, который я сохраняю на arraylist, является ссылкой, а не переменной? Я обновляю свой вопрос так, как я создаю свой путь. –
Да, это ссылка как любой другой объект Java. Вы можете использовать конструктор копирования, чтобы скопировать путь в новый путь до его сохранения. –
Спасибо, сейчас я делаю это как paths.add (new Path (drawPath))); и это работает :) –