Подтвердить что ты не робот

Событие Ontouch OnTouchListener вызывается дважды в 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;
}
4b9b3361

Ответ 1

touchListener будет вызываться для каждого MotionEvent.ACTION_DOWN, MotionEvent.ACTION_UP и MotionEvent.ACTION_MOVE. поэтому, если вы хотите выполнить код только один раз, то есть MotionEvent.ACTION_DOWN затем внутри

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

Ответ 2

Или просто используйте onClickListener:

        myButton.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                //do what you gotta do
            }
        });