OnTouchListener的Ontouch事件在android中被调用两次

Abh*_*ekB 62 android

我正在创建一个应用程序,其中在运行时给出的两个点之间生成一行.
我看到的问题是,onTouch()在我的模拟器上每次点击都会调用两次.我知道检查了两个动作(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;
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*wat 154

touchListener将呼吁联合国各MotionEvent.ACTION_DOWN,MotionEvent.ACTION_UPMotionEvent.ACTION_MOVE.所以,如果你只想执行一次代码,即MotionEvent.ACTION_DOWN 在内部执行代码

onTouch()
 if (event.getAction() == MotionEvent.ACTION_DOWN) {
//your code 
}
Run Code Online (Sandbox Code Playgroud)