Как реализовать жест «Two Finger Drag» на Android?

Я новичок в разработке Android и работаю над проектом исследований доступности для слепых (проект уровня Jelly Bean API 17). Я экспериментировал с некоторыми жестами, а жест Two-Finger-Drag был действительно сложным для реализации. Следующее изображение отражает то, что мне действительно нужно.

Жест перетаскивания

Я хочу, чтобы слепой пользователь перетаскивал два пальца по горизонтали (в любом месте на экране), и он получал аудиовыход текста, который он ввел в EditText. Также в соответствии с расстоянием, которое два пальца перемещают при перетаскивании, мы выводим каждое слово отдельно. (Пример ниже)

Пример: если пользователь набирает «Сегодня хороший день» и тащит свой палец (значение x), например, 10 единиц влево, мы выводим «хороший день», но если он перетащит его, скажем, 20 единиц влево, мы выводим «хороший День " , на 30 единиц слева -" хороший день "и т. Д.

Я наткнулся на который, кажется, обнаружил прикосновение двух пальцев:

TouchEvent(MotionEvent event) 

Также этот учебник по обнаружению множественных касаний кажется многообещающим, но мне нужно, чтобы он работал на касание и перетаскивание, что я не уверен, что можно реализовать это.

Любые новые предложения по реализации этого или указатели на учебные пособия, которые могут помочь, были бы замечательными!

Заранее спасибо, Adit

Итак, благодаря Гейбу здесь и многочисленным блогам, я нашел решение своего вопроса!

Сначала я инициализировал свои переменные в классе «Активность»

 int GLOBAL_TOUCH_POSITION_X = 0; int GLOBAL_TOUCH_CURRENT_POSITION_X = 0; 

Далее, Inside the onCreate ():

 //Two-Finger Drag Gesture detection RelativeLayout TextLoggerLayout = (RelativeLayout)findViewById(R.id.ActivityrView); TextLoggerLayout.setOnTouchListener( new RelativeLayout.OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent m) { handleTouch(m); return true; } }); 

Теперь определите функцию handleTouch (m) следующим образом : он выводит текущее положение «Двустороннего касания» вместе с начальным положением касания:

 void handleTouch(MotionEvent m){ //Number of touches int pointerCount = m.getPointerCount(); if(pointerCount == 2){ int action = m.getActionMasked(); int actionIndex = m.getActionIndex(); String actionString; TextView tv = (TextView) findViewById(R.id.testDiffText); switch (action) { case MotionEvent.ACTION_DOWN: GLOBAL_TOUCH_POSITION_X = (int) m.getX(1); actionString = "DOWN"+" current "+GLOBAL_TOUCH_CURRENT_POSITION_X+" prev "+GLOBAL_TOUCH_POSITION_X; tv.setText(actionString); break; case MotionEvent.ACTION_UP: GLOBAL_TOUCH_CURRENT_POSITION_X = 0; actionString = "UP"+" current "+GLOBAL_TOUCH_CURRENT_POSITION_X+" prev "+GLOBAL_TOUCH_POSITION_X; tv.setText(actionString); break; case MotionEvent.ACTION_MOVE: GLOBAL_TOUCH_CURRENT_POSITION_X = (int) m.getX(1); int diff = GLOBAL_TOUCH_POSITION_X-GLOBAL_TOUCH_CURRENT_POSITION_X; actionString = "Diff "+diff+" current "+GLOBAL_TOUCH_CURRENT_POSITION_X+" prev "+GLOBAL_TOUCH_POSITION_X; tv.setText(actionString); break; case MotionEvent.ACTION_POINTER_DOWN: GLOBAL_TOUCH_POSITION_X = (int) m.getX(1); actionString = "DOWN"+" current "+GLOBAL_TOUCH_CURRENT_POSITION_X+" prev "+GLOBAL_TOUCH_POSITION_X; tv.setText(actionString); break; default: actionString = ""; } pointerCount = 0; } else { GLOBAL_TOUCH_POSITION_X = 0; GLOBAL_TOUCH_CURRENT_POSITION_X = 0; } } 

Вот оно! Наконец, реализован жест «Два пальца». Похоже, я тоже могу нарисовать крошечный пост в блоге! 🙂

Я не знаю, насколько релевантно добавить ответ теперь к такому старому вопросу, но я разрабатываю библиотеку для поддержки основных жестов 1 и 2 пальца на Android с очень простым снижением функциональности.

Большинство жестов можно установить так же легко, как

 view.setOn2FingerGestureListener ( new On2FingerGestureListener () { @Override onSwipeup() { } onSwipedown() { } }); 

Он доступен с открытым исходным кодом, а также доступен для загрузки как .jar

Touch и drag – это серия событий. Сначала у вас есть вниз, тогда у вас есть 1 или несколько ходов, а затем у вас есть. Вы обнаруживаете начальную точку вниз, а затем перетаскивание происходит на ходах. Перетаскивание останавливается.

Чтобы сделать перетаскивание 2 пальцев, обратите внимание только на перетаскивание, если MotionEvent.getPointerCount () == 2.