Я наткнулся на что-то странное, я хочу прислушиваться к щелчкам, и когда это происходит, я хочу получить его направление, но кажется, что щелчок происходит три раза, в чем причина?

this.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
                int x = (int) motionEvent.getX();
                int y = (int) motionEvent.getY();
                Log.i(LOGGING_CONST, "click performed x: " + x + " y: " + y);
            }
        }
    });

@Override
public boolean performClick() {
    return super.performClick();
}

Logcat после одного щелчка:

I/GAME_VIEW_CLASS:: click performed x: 481 y: 804
I/GAME_VIEW_CLASS:: click performed x: 481 y: 804
I/GAME_VIEW_CLASS:: click performed x: 481 y: 804
-1
Jakub Ledwon 23 Окт 2018 в 23:57

2 ответа

Лучший ответ

Потому что вы слушаете сенсорные события, а сенсорные события запускаются при каждом движении пальца. Попробуйте прослушать событие onDown. Например;

        this.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    int x = (int) event.getX();
                    int y = (int) event.getY();
                    Log.i(LOGGING_CONST, "click performed x: " + x + " y: " + y);
                    break;
            }
            return true;
        }
    });
2
Sinan Ceylan 23 Окт 2018 в 21:47

Вы слушаете все виды сенсорных событий, такие как ACTION_DOWN, ACTION_MOVE, ACTION_CANCEL

Если вы хотите щелкнуть одним нажатием, тогда слушайте только ACTION_DOWN,

Переключатель ( event.ACTION_DOWN ) :

{

Введите свой код здесь для одного щелчка

}

См. ссылку ниже:

https://developer.android.com/reference/android/view/MotionEvent

0
Jerry 24 Окт 2018 в 05:17
52957743