1. ホーム
  2. android

アンドロイドでOnTouchListenerのOntouchイベントが2回呼ばれる

2023-10-21 02:56:04

質問

実行時に与えられた2点間に線を生成するアプリケーションを作成しています。

私が見た問題は onTouch() が2回呼び出されることです。私は、2つのアクション ( ACTION_DOWN &です。 ACTION_UP ) がチェックされます。しかし、私は自分のアプリが onTouch() を一度だけ呼び出したいのです。何かアイデアがあれば教えてください。これは私が使用したコードです。

SurfaceView surfaceview = new SurfaceView(getContext());
SurfaceHolder h = surfaceview.getHolder();
int action = event.getActionMasked();
synchronized(h) {
    if (action == MotionEvent.ACTION_DOWN && action!=MotionEvent.ACTION_CANCEL)// && flag==true)
    {
        Log.d("TouchView","ACTION_DOWN ");
        Point pointer = new Point();
        pointer.x = (int) event.getX();
        pointer.y = (int) event.getY();
        touchPoint.add(pointer);
        view.invalidate();
        Log.d("MotionEvent.ACTION_DOWN", "point: " + pointer);
        action = MotionEvent.ACTION_CANCEL;
        flag = false;
    }
    else if(action == MotionEvent.ACTION_UP && action!=MotionEvent.ACTION_CANCEL)// && flag==true)
    {
        Log.d("TouchView","ACTION_UP");
        Point pointer = new Point();
        pointer.x = (int) event.getX();
        pointer.y = (int) event.getY();
        touchPoint.add(pointer);
        view.invalidate();
        Log.d("MotionEvent.ACTION_UP", "point: " + pointer);
        action = MotionEvent.ACTION_CANCEL;
        flag = false;
    }
    else return false;
}

どのように解決するのですか?

touchListenerは、すべての MotionEvent.ACTION_DOWN , MotionEvent.ACTION_UP そして MotionEvent.ACTION_MOVE というように、一度だけコードを実行したい場合、つまり MotionEvent.ACTION_DOWN の中で

onTouch()
 if (event.getAction() == MotionEvent.ACTION_DOWN) {
//your code 
}