MotionEvent.ACTION_DOWN будет происходить только при событии касания FIRST к экрану.
"ACTION_DOWN
Константа для getActionMasked (): нажатый жест запущен... "(От https://developer.android.com/reference/android/view/MotionEvent#ACTION_DOWN)
Для ваших ВТОРОГО или более пальцев необходимо проверить на ACTION_POINTER_DOWN
"ACTION_POINTER_DOWN
Константа для getActionMasked (): неосновной указатель упал ..." (С https://developer.android.com/reference/android/view/MotionEvent#ACTION_POINTER_DOWN)
Поскольку вы используете только два пальца, вы не будетенужно беспокоиться о ActionIndex (getActionIndex ()). Первый палец, касающийся экрана, всегда равен ACTION_DOWN , а каждое прикосновение вниз - ACTION_POINTER_DOWN .
OnACTION_UP - это обратное действие. Каждое касание (кроме последнего касания) - это ACTION_POINTER_UP, а последнее касание - это ACTION_UP.
ПРИМЕЧАНИЕ. Первое касание (ACTION_DOWN) всегда имеет индекс 0.остается назначенным на ощупь, покасенсорный снимается с экрана.Поскольку вы жестко программируете индексы, любые случайные прикосновения к экрану приведут к неожиданным результатам.Для тестовой программы это нормально, но в конечном итоге вам придется обрабатывать индексы.
Пример:
Палец 1 (ACTION_DOWN) касается экрана и получает индекс 0.
Палец 2 (ACTION_POINTER_DOWN) касается экрана и получает индекс 1.
Палец 3 (ACTION_POINTER_DOWN) касается экрана и получает индекс 2
Палец 2 (индекс 1) снятэкран (ACTION_POINTER_UP)
Палец 1 (индекс 0) и палец 3 (индекс 2) по-прежнему находятся в MotionEvent, и их индексы остаются присвоенными им.
Самое простое изменение дляВам необходимо изменить:
case MotionEvent.ACTION_DOWN:
if (fingers == 1) {
...
на:
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
if (fingers == 1) {
...
, а также изменить:
case MotionEvent.ACTION_UP:
if (fingers == 1) {
...
на:
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
if (fingers == 1) {
...
потому что вы уже обрабатываете число и индексы пальцев.
Это изменение сделает ваш код "более правильным", потому что оно будет захватывать второе DOWN и первое UP, но это не решит вашу проблему.ACTION_MOVE уже перехватывает обе точки касания, когда они перемещаются, и вы уже обрабатываете два индекса и присваиваете X и Y.Так что проблема должна быть в другом месте вашей программы.