Intereting Posts
Как получить абсолютные координаты вида Как исправить «Пропустите перетаскивание, поскольку мы ждем ответа WebCore на прикосновение» Андроид, получивший манифест слияния с ошибкой после обновления до новой версии gradle Учебники или введение для написания простого языка сценариев? Начать действие с экрана предпочтений (намерение определено в файле xml) Проверить наличие файла в папке активов андроидов? Получение имени и электронной почты из списка контактов очень медленно Передача списка в виде varargs «ComputeValuesWithHarfbuzz – нужно принудительно выполнить одиночный запуск» в Android 4: что это значит? Android Spinner с несколькими вариантами выбора Двойной сим-Android Создание целочисленного массива идентификаторов ресурсов Установить заголовок inToolBar из фрагмента в Android Как вызвать событие, когда scrollView достигает нижней части Android? Невозможно десериализовать экземпляр объекта из токена START_ARRAY в Spring Webservice

Android OnGestureListener Fling не обнаруживает

Я хочу обнаружить движение движения в блоке экрана. Для этого я использую следующий код.

public class MyinfoActivity extends Activity implements OnGestureListener { @Override public void onCreate(Bundle savedInstanceState) { .......... .......... gestureScanner = new GestureDetector(this); resBlock = (TableRow) findViewById(R.id.ResBlock); gestureScanner = new GestureDetector(this); } @Override public boolean onTouchEvent(MotionEvent me){ Log.d(null,"Touch"); if (gestureScanner.onTouchEvent(me)) return gestureScanner.onTouchEvent(me); else return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Log.d(null,"Fling"); ............ ............ } @Override public boolean onDown(MotionEvent arg0) { return false; } @Override public void onLongPress(MotionEvent e) {} @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false; } @Override public void onShowPress(MotionEvent e) {} @Override public boolean onSingleTapUp(MotionEvent e) { return false; } } 

Он обнаруживает TouchEvent, но он не обнаруживает движения движения. В чем проблема в моем коде?

Solutions Collecting From Web of "Android OnGestureListener Fling не обнаруживает"

Я использовал следующий код и решил проблему.

 public class MyinfoActivity extends Activity { private GestureDetector gestureScanner; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.myinfotrackerinner); gestureScanner = new GestureDetector(this,simpleOnGestureListener); } @Override public boolean onTouchEvent(MotionEvent event) { return gestureScanner.onTouchEvent(event); } GestureDetector.SimpleOnGestureListener simpleOnGestureListener = new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDown(MotionEvent event) { return true; } @Override public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { Log.d(null,"Fling"); int dx = (int) (event2.getX() - event1.getX()); // don't accept the fling if it's too short // as it may conflict with a button push if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.abs(velocityY)) { if (velocityX > 0) { moveGraph("L"); } else { moveGraph("R"); } return true; } else { return false; } } }; } 

Сначала ваш метод onTouchEvent неверен и вызовет 2 вызова onTouchEvent объектом gestureScanner. Вы должны изменить это:

  @Override public boolean onTouchEvent(MotionEvent me){ Log.d(null,"Touch"); if (gestureScanner.onTouchEvent(me)) return true; else return super.onTouchEvent(event); // or false (it's what you whant). } 

У вас также есть эта строка дважды:

 gestureScanner = new GestureDetector(this); 

Затем попробуйте изменить свой метод onFling следующим образом:

 @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) { try{ if(Math.abs(e1.getY()-e2.getY()) > 250) return false; if(e1.getX() - e2.getX() > 120 && Math.abs(velocityX) > 200){ Log.d("Fling", "Move Next"); //do something... } else if(e2.getX() - e1.getX() > 120 && Math.abs(velocityX) > 200){ Log.d("Fling", "Move Previous"); //do something... } return false; } catch(Exception e){ return false; } } 

Return true в методе onDown

 @Override public boolean onDown(MotionEvent arg0) { return true; }