Получение ТОЛЬКО события onTouch (Android)

Я пытаюсь разделить несколько вещей здесь.

У меня есть программа с кнопками изображения. К ним прикреплены onTouchListeners.

Я хочу, чтобы событие касания запускалось ТОЛЬКО касанием, а не щелчком. Я имею в виду, что если я использую мышь для щелчка, например, я не хочу, чтобы событие onTouch, прикрепленное к ImageButton, запускалось. Однако он запускается, когда вы щелкаете мышью по кнопке.

Можно ли запустить событие ТОЛЬКО при касании?

Мой код:

myImageButton.setOnTouchListener(new Button.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent arg1) {
                 if (arg1.getAction() == android.view.MotionEvent.ACTION_DOWN) {    
                    Toast.makeText(LiVoiceActivity.this,
                                    "You touched me!",
                                    Toast.LENGTH_LONG).show();
                }
                 return true;
            }
    });

Спасибо!


person Carlos Pereira    schedule 27.06.2012    source источник


Ответы (1)


В классе MotionEvent есть поле, известное как Tool_Type. Я реализовал здесь проверку типа мыши:

API 14, также известный как ПРОСТОЙ РЕЖИМ

myImageButton.setOnTouchListener(new Button.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent arg1) {
                     if (arg1.getAction() == android.view.MotionEvent.ACTION_DOWN
                              && (MotionEvent.TOOL_TYPE_MOUSE != arg1.getToolType(0)) {    
                        Toast.makeText(LiVoiceActivity.this,
                                        "You touched me!",
                                        Toast.LENGTH_LONG).show();
                    }
                     return true;
                }
        });

API 9

myImageButton.setOnTouchListener(new Button.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent arg1) {
                     if (arg1.getAction() == android.view.MotionEvent.ACTION_DOWN
                              && (arg1.getSize() > 1) {    
                        Toast.makeText(LiVoiceActivity.this,
                                        "You touched me!",
                                        Toast.LENGTH_LONG).show();
                    }
                     return true;
                }
        });

Теперь это проверяет размер полученного MotionEvent. ПРЕДПОЛАГАЕМЫЙ щелчок мыши будет иметь размер 1, поэтому распознаются только размеры больше 1. Поэкспериментируйте с этим числом и посмотрите, сможете ли вы различить касание мышью и пальцем.

person Jack Satriano    schedule 27.06.2012
comment
jack57, спасибо за ответ. Я пытался использовать ваш код, но он говорит, что TOOL_TYPE_MOUSE также не может быть разрешен, он не может найти метод getToolType(). Какие-нибудь советы? - person Carlos Pereira; 27.06.2012
comment
Похоже на проблему с API :(. С каким API вы работаете? Пример. API 10 == Android 2.3.3 - person Jack Satriano; 27.06.2012
comment
Подтвержденная проблема с API, работает только на 14 и выше. Пожалуйста, дайте мне знать, над каким API вы работаете. - person Jack Satriano; 27.06.2012