首页 > 代码库 > SwipeMenuListView在ScrollView里上下滑动导致菜单不能显示完全的bug解决方法
SwipeMenuListView在ScrollView里上下滑动导致菜单不能显示完全的bug解决方法
这是因为上下滑动的时候,事件被ScrollView截获了,这时候应该禁止ScrollView截获上下滑动事件,解决方法如下
public class NoRollSwipeMenuListView extends SwipeMenuListView { private GestureDetector mGestureDetector; public NoRollSwipeMenuListView(Context context) { super(context); mGestureDetector = new GestureDetector(context, onGestureListener); } public NoRollSwipeMenuListView(Context context, AttributeSet attrs) { super(context, attrs); mGestureDetector = new GestureDetector(context, onGestureListener); } public NoRollSwipeMenuListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mGestureDetector = new GestureDetector(context, onGestureListener); } public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } @Override public boolean onTouchEvent(MotionEvent ev) { boolean b = mGestureDetector.onTouchEvent(ev);// LogUtil.w("onTouchEvent", "mGestureDetector.onTouchEvent(ev)->" + b); return super.onTouchEvent(ev); } private GestureDetector.OnGestureListener onGestureListener = new GestureDetector.SimpleOnGestureListener() { //distanceX 左右滑动距离,左滑动正值,右滑动负值 //distanceY 上下滑动距离,上滑动正值,下滑动负值 @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if (Math.abs(distanceY) >= Math.abs(distanceX)) {//上下滑动距离大于左右滑动距离,当作上下滑动// LogUtil.w("onScroll", "distanceX=" + distanceX + ":distanceY=" + distanceY);// LogUtil.w("onScroll", "true"); //上下滑动不做任何操作,在这里父ScrollView已经交出onTouch权限,否则如果权限在父ScrollView的话这里接收不到事件 //所以执行到这里是因为下面的setParentScrollAble(false);已经执行过了 return true; } //当滑动NoRollSwipeMenuListView的时候,让父ScrollView交出onTouch权限,也就是让父ScrollView停住不能滚动 setParentScrollAble(false);// LogUtil.w("onScroll", "false"); return false; } }; /** * 是否把滚动事件交给父ScrollView * * @param flag */ private void setParentScrollAble(boolean flag) { //这里的parentScrollView就是NoRollSwipeMenuListView外面的那个ScrollView// LogUtil.w("setParentScrollAble", "flag->" + flag); getParent().requestDisallowInterceptTouchEvent(!flag); }}
SwipeMenuListView在ScrollView里上下滑动导致菜单不能显示完全的bug解决方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。