Android listview的滑动冲突解决方法
2017-02-24 08:49
633 查看
Android listview的滑动冲突解决方法
在Android开发的过程中,有时候会遇到子控件和父控件都要滑动的情况,尤其是当子控件为listview的时候。就比如在一个ScrollView里有一个listview,这种情况较常见,就会出现这种滑动冲突的情况。这种情况也比较常见,有时候就是这样,没法,但是,了解事件分发的我们知道应该怎么处理这样的事情
有两点需要注意:
一般来说,view的onTouchEvent返回true,即消耗点击事件,viewgroup的onInterceptTouchEvent返回false,即不拦截点击事件,这一点从android源码中可以看出来。但是listview的父类AbsListView重写了onInterceptTouchEvent,返回了true,注意这里不是一定返回true,但是我觉得这一点可以先忽略。
onTouchEvent和onInterceptTouchEvent的调用顺序。点击事件从父控件向子控件传递,如果父控件不拦截,则交由子控件拦截,如果父控件拦截了,则交由父控件的onTouchEvent处理,如果最终处理点击事件的控件的onTouchEvent返回了false,则将会直接调用其父控件的onTouchEvent,如此向上类推
其实解决方法也很简单:重写父控件的onInterceptTouchEvent函数,在move的时候根据需要返回true,比如左右滑动返回true,其他情况均返回false。这样,当左右滑动的时候,由于onInterceptTouchEvent返回了true,父控件就能处理,其他情况,事件将传递到listview中,listview自身可以处理上下滑动。
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { Log.d(TAG, "onInterceptTouchEvent-slop:"+mTouchSlop); final int action = ev.getAction(); if ((action == MotionEvent.ACTION_MOVE) && (mTouchState != TOUCH_STATE_REST)) { return true; } final float x = ev.getX(); final float y = ev.getY(); switch (action) { case MotionEvent.ACTION_MOVE: final int xDiff = (int)Math.abs(mLastMotionX-x); if (xDiff>mTouchSlop) { mTouchState = TOUCH_STATE_SCROLLING; } break; case MotionEvent.ACTION_DOWN: mLastMotionX = x; mLastMotionY = y; mTouchState = mScroller.isFinished()? TOUCH_STATE_REST : TOUCH_STATE_SCROLLING; break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: mTouchState = TOUCH_STATE_REST; break; } return mTouchState != TOUCH_STATE_REST; }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
您可能感兴趣的文章:
相关文章推荐
- 完美解决Android里面scrollview嵌套及listview嵌套viewpager的滑动冲突问题的简单方法
- Android中解决ListView嵌套Viewpager时,滑动事件冲突的方法
- Android中解决ListView嵌套Viewpager时,滑动事件冲突的方法
- Android scrollview嵌套listview 滑动事件冲突的解决方法
- Android 中listview 和scrollview 滚动冲突事件的解决方法
- android 解决ListView点击与滑动事件冲突
- Android listview viewpager解决冲突 滑动
- android ListView常见问题解决方法(滚动背景变黑,去除滑动时阴影,拖动时Item图片不显示)
- activity中滑动手势和listview滑动冲突解决方法
- Android listview viewpager解决冲突 滑动
- Android ViewPager嵌套ViewPager滑动冲突的解决方法
- 关于android滑动事件的冲突的一种解决方法
- android ListView/GridView与ScrollView嵌套的滑动冲突解决
- 【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- Android ViewPager嵌套ViewPager滑动冲突的解决方法
- Android listview viewpager解决冲突 滑动
- 解决listView与ScrollView滑动冲突的方法
- [Android]ScrollView和ListView套用冲突的解决方法
- Android ListView滑动后背景变黑问题解决方法
- SwipeRefreshLayout与SwipeMenuListView上下左右滑动冲突解决方法