2
私は描画アプリケーションで作業しています。それはかなり簡単で、onTouchEvent、パス、およびcanvas.drawPathを使用します。ユーザーがすばやくスワイプして停止せずに離すと、パスの最後のセグメントが連続して点滅します。 ACTION_UP条件では、パスを更新し、boolean 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;
}
}