Я работаю над приложением для рисования.Это довольно просто, использует onTouchEvent, paths и canvas.drawPath.Всякий раз, когда пользователь делает быстрый удар и отпускает без остановки, последний сегмент пути постоянно мигает.В условии ACTION_UP я обновляю путь и устанавливаю логическое значение resetPath равным true, а в onDraw я рисую путь, и если resetPath равен true, я вызываю path.reset (), а затем устанавливаю resetPath на false.Что я делаю не так?
class DrawingPanel extends SurfaceView implements SurfaceHolder.Callback {
private DrawingThread _thread;
private Path path;
private Boolean resetPath = false;
public DrawingPanel(Context context) {
super(context);
getHolder().addCallback(this);
_thread = new DrawingThread(getHolder(), this);
path = new Path();
}
private float mX, mY;
private static final float TOUCH_TOLERANCE = 25;
public boolean onTouchEvent(MotionEvent event) {
synchronized (_thread.getSurfaceHolder()) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
path.reset();
path = new Path();
path.moveTo(event.getX(), event.getY());
mX = event.getX();
mY = event.getY();
}else if(event.getAction() == MotionEvent.ACTION_MOVE){
float dx = Math.abs(event.getX() - mX);
float dy = Math.abs(event.getY() - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
path.quadTo(mX, mY, (event.getX() + mX)/2, (event.getY() + mY)/2);
mX = event.getX();
mY = event.getY();
}
}else if(event.getAction() == MotionEvent.ACTION_UP){
resetPath = true;
}
return true;
}
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawPath(path, mPaint);
if (resetPath) {
path.reset();
resetPath = false;
}
}