Android-приложение, как совместить одно касание и два касания в слушателе OnTouch? - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь объединить две операции в прослушивателе Android OnTouch, в результате чего одно касание будет выполнять одно, а два касания - другое. Я использую код, чтобы определить, урезал ли пользователь экран, чтобы разрешить его масштабирование. Я изменил ответ, приведенный в предыдущем ответе, и это то, что я придумал (я удалил лишний код, поскольку я хотел проиллюстрировать части, которые работают, по сравнению с теми, которые не работают):

    myView.setOnTouchListener( new View.OnTouchListener()
    {

        myView.setOnTouchListener( new View.OnTouchListener()
        {

            private GestureDetector gestureDetector = new GestureDetector(getApplicationContext(), new GestureDetector.SimpleOnGestureListener()
            {
                @Override
                public boolean onDoubleTap(MotionEvent e) {

                // Stuff in here doesn't work
             }
         });


        @Override
        public boolean onTouch( View v, MotionEvent event )
        {

                    if (event.getPointerCount() > 1)
                    {
            // pinch to zoom stuff omitted - this works
                    }
                    else
                    {
                        if (action == MotionEvent.ACTION_UP)
                        {
                                //single touch logic

                                // code omitted 

                         }
                    }

        }

    });

 }

Детали в GestureListener не работают, но код в OneTouch работает У меня лично были сомнения по поводу объединения детектора жестов в OnTouchListener, так как он казался немного неуклюжим, но ответ на предыдущем форуме ( DoubleTap в Android ) казался довольно аккуратным.

Существует еще одна проблема с кодом: всякий раз, когда я выполняю «действие вверх» и освобождаю пальцы от экрана, активируется код с надписью «логика одного касания». Как это может быть, когда код для логики с одним касанием отделен от логики с двойным касанием / пинч? Кажется, у меня здесь две проблемы!

1 Ответ

0 голосов
/ 20 июня 2019

Попробуйте это;

final GestureDetector gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){
           //here is the method for double tap

            @Override
            public boolean onDoubleTap(MotionEvent e) {

                return true;
            }

            @Override
            public void onLongPress(MotionEvent e) {
                super.onLongPress(e);

            }

            @Override
            public boolean onDoubleTapEvent(MotionEvent e) {
                return true;
            }

            @Override
            public boolean onDown(MotionEvent e) {
                return true;
            }
        });


    yourView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                return gestureDetector.onTouchEvent(event);
            }
        });
...