Intereting Posts
SoftKeyboard скрывает EditText Как избежать двойного пробела между элементами при использовании RecyclerView с помощью StaggeredGridLayoutManager? Отсутствие прокрутки с помощью ScrollView в PopupWindow Как показать индикатор выполнения в каждом элементе списка? Почему Wifi включен, но не связан с ней. Расположение сети при использовании LocationManager? Возможно ли получить MAC-адрес клиентских устройств, находящихся в пределах диапазона Wi-Fi? Как изменить цвет текста кнопки? Автоматическая фокусировка для Android android Apk для планшета, по-прежнему говорит «Предназначен для телефонов» Экран входящего вызова Android Градуальная сборка Задача Javadoc не работает с «неизвестным тегом: attr» Как импортировать только выбранные ABI из исходной библиотеки из AAR? Вид не прикреплен к окну Использование Parcelable с круговыми ссылками Отображение изображений хранилища в базе данных RecyclerView

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; }