Android(安卓)GestureDetector滑动监听事件
16lz
2021-01-25
项目中需要做滑动监听事件,具体如下:
做的过程中遇到点小麻烦,写了监听后无效,具体原因及解决方法请看后面
今天做的时候很莫名其妙的监听滑动事件不管用了,后来找到原因是因为布局文件中用了ScrollView,与GestureDetector冲突,解决方法是重写dispatchTouchEvent方法即可:
在找原因的时候发现布局文件中添加android:longClickable="true"对监听滑动事件也有影响,具体没仔细研究
做的过程中遇到点小麻烦,写了监听后无效,具体原因及解决方法请看后面
final int RIGHT = 0; final int LEFT = 1; private GestureDetector gestureDetector; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_detail_news_img);gestureDetector = new GestureDetector(NewsDetailImgActivity.this,onGestureListener); private GestureDetector.OnGestureListener onGestureListener = new GestureDetector.SimpleOnGestureListener() {@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {Log.v(TAG, "onFling...");float x = e2.getX() - e1.getX();float y = e2.getY() - e1.getY();if (x > 300) {doResult(RIGHT);} else if (x < -300) {doResult(LEFT);}return true;}};public boolean onTouchEvent(MotionEvent event) {return gestureDetector.onTouchEvent(event);}public void doResult(int action) {switch (action) {case RIGHT:Log.v(TAG, "go right");System.out.println("go right");break;case LEFT:Log.v(TAG, "go LEFT");System.out.println("go LEFT");break;}}}
今天做的时候很莫名其妙的监听滑动事件不管用了,后来找到原因是因为布局文件中用了ScrollView,与GestureDetector冲突,解决方法是重写dispatchTouchEvent方法即可:
@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {// TODOAuto-generatedmethodstubgestureDetector.onTouchEvent(ev); // 让GestureDetector响应触碰事件super.dispatchTouchEvent(ev); // 让Activity响应触碰事件return false;}
在找原因的时候发现布局文件中添加android:longClickable="true"对监听滑动事件也有影响,具体没仔细研究
更多相关文章
- 2.2.1 LinearLayout(线性布局)
- Android弹出式窗口PopuWindow的使用
- 了解使用Android(安卓)ConstraintLayout
- Android(安卓)CheckBox 控件突然报错
- android中三种onClick事件的实现,与对比
- LinearLayout 线性布局属性
- Android(安卓)多种ViewType的ListView
- Android游戏开发系列教程第三讲(事件处理)
- 【安卓笔记】touch事件的分发和消费机制