我正在开发一个绘图应用程序。它相当简单,使用 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;
}
}