Обнаружение событий onLongPress и onClick в onTouchListener - PullRequest
0 голосов
/ 17 января 2020

У меня есть onTouchListener(), где мне нужно определить, нажал ли пользователь или долго нажал. Таким образом, я могу определить, что это простой щелчок или длинный щелчок, но проблема в том, что я могу определить, что это только в Motion.ACTION_UP.

mViewBinder.actionMain.setOnTouchListener(new View.OnTouchListener() {
        private long lastTouchDown;
        private int CLICK_ACTION_THRESHOLD = 200;

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    lastTouchDown = System.currentTimeMillis();
                    break;
                case MotionEvent.ACTION_UP:
                    if(System.currentTimeMillis() - lastTouchDown < CLICK_ACTION_THRESHOLD) 
                        Logger.log("OnCLickEvent", "onClickListener");
                    else 
                        Logger.log("OnCLickEvent", "onLongClickListener");

                    break;
            }
            return true;
        }
    });

Я думаю, что мне нужно как-то определить в ACTION_DOWN, если это долгое нажатие и в ACTION_UP определите, что это был щелчок. Моя цель - показать тост, когда 1) пользователь долго нажимал кнопку, не вытягивая палец 2) пользователь нажимал кнопку

Я думаю, вы понимаете. Поэтому я использую OnTouchListener(), потому что мне нужен этот MotionEvent event в конструкторе для моих будущих целей. Спасибо.

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Зависит от вашего варианта использования. Если есть причина, по которой вы не можете просто использовать setOnLongClickListener (), я бы предложил вместо этого использовать GestureDetector.

https://developer.android.com/training/gestures/detector

1 голос
/ 17 января 2020

вы можете использовать GestureDetector для него

new GestureDetector(context,
                    new GestureDetector.SimpleOnGestureListener() {
                        @Override
                        public boolean onSingleTapUp(MotionEvent e) {
                            return true;
                        }

                        @Override
                        public void onLongPress(MotionEvent e) {

                        }
                    });
...