В Android, какая разница между getAction() и getActionMasked() в MotionEvent?
Я смущен двумя способами в Android. Это
кажется, что оба метода говорят вам, что это за событие,
то есть, является ли это событием вниз или вверх.
Когда я буду использовать, который?
public void onTouchEvent(MotionEvent e)
Не цитируйте документацию, потому что я ее прочитал, и я не вижу никаких параметров, которые я могу предоставить одному из методов, чтобы получить что-то другое.
public final int getAction ()
и
public final int getActionMasked()
Ответы
Ответ 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
- ...