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

В Android, какая разница между getAction() и getActionMasked() в MotionEvent?

Я смущен двумя способами в Android. Это кажется, что оба метода говорят вам, что это за событие, то есть, является ли это событием вниз или вверх.

Когда я буду использовать, который?

public void onTouchEvent(MotionEvent e)

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

public final int getAction ()

и

public final int getActionMasked()
4b9b3361

Ответ 1

Да, оба они возвращают действие (вверх/вниз и т.д.), но getAction может возвращать действие с информацией указателя, и в этом случае события могут быть немного разными. getActionMasked всегда будет возвращать "простые" действия с информацией указателя "Masked out" (получить это?), после чего вы вызываете getPointerIndex на одно и то же событие, чтобы получить индекс указателя. Обратите внимание, что вы чаще всего это видите на устройствах с несколькими касаниями с несколькими точками контакта (указатели). Индекс указателя по существу является способом сопоставления событий с контактными точками, поэтому вы можете рассказать им обособленно.

Ответ 2

getAction() возвращает идентификатор указателя и информацию о событии (то есть вверх, вниз, перемещение).

getActionMasked() возвращает только информацию о событии (т.е. вверх, вниз, перемещать). Другая информация замаскирована.

Например:

getAction() возвращает 0x0105.
getActionMasked() вернет 0x0005, который равен 0x0105 && & ACTION_MASK.

  • Значение ACTION_MASK равно 0xFF. Он маскирует следующие действия.
    • ACTION_DOWN 0, UP 1, MOVE 2
    • ACTION_POINTER_DOWN 5, UP 6
  • Значение ACTION_POINTER_ID_MASK равно 0xFF00. Он замаскировал идентификатор указателя из следующих устаревших констант.
    • ACTION_POINTER_1_DOWN 0x0005
    • ACTION_POINTER_2_DOWN 0x0105
    • ACTION_POINTER_3_DOWN 0x0205
    • ...