zoukankan      html  css  js  c++  java
  • 当ViewPager嵌套在ScrollView/ListView里时,手势冲突如何处理?


    有时我们需要将ViewPager嵌套在其他已经含有手势动作的ViewGroup里,如ScrollView,ListView时,会造成手势冲突,如表现为ViewPager向左划时,不小心向上移动了一点距离,ViewPager立刻回弹到原始位置。

    主要问题出在ScrollView/ListView作为ViewPager的ParentView,会先接受到触摸信息,而且他们对上下滑动是会做出拦截动作,并接管触摸信息的向下传递,导致ViewPager滑动异常。 先看一种解决方式:

    public class ScrollViewExtend extends ScrollView {  
        private float xDistance, yDistance, xLast, yLast;  
        public ScrollViewExtend(Context context, AttributeSet attrs) {  
            super(context, attrs);  
        }  
        @Override  
        public boolean onInterceptTouchEvent(MotionEvent ev) {  
            switch (ev.getAction()) {  
                case MotionEvent.ACTION_DOWN:  
                    xDistance = yDistance = 0f;  
                    xLast = ev.getX();  
                    yLast = ev.getY();  
                    break;  
                case MotionEvent.ACTION_MOVE:  
                    final float curX = ev.getX();  
                    final float curY = ev.getY();             
                    xDistance += Math.abs(curX - xLast);  
                    yDistance += Math.abs(curY - yLast);  
                    xLast = curX;  
                    yLast = curY;  
                    if(xDistance > yDistance){  
                        return false;  
                    }    
            }  
            return super.onInterceptTouchEvent(ev);  
        }  
    }   
    

    这种方式的确可以解决这个问题,但是其实Google已经提供了一个函数来解决ParentView与ChildView手势冲突的问题。

    public void requestDisallowInterceptTouchEvent(boolean disallowIntercept)
    

    由ViewPager在OnTouch/onInterceptTouchEvent,dispatchTouchEvent中调用即可

  • 相关阅读:
    前端性能优化-全链路质量监控体系建设
    前端性能优化-研发开发流程优化
    一次VLAN标签引发的网络事件的处置
    2001
    SpringBoot定时任务
    在el-dialog中使用ref找不到元素?
    el-table使用checkbox时,获取选中数据的id?
    SpringBoot邮件发送
    表单中el-select和el-input的长度不一致?
    element-ui如何修改el-dialog的样式?
  • 原文地址:https://www.cnblogs.com/Sharley/p/5222518.html
Copyright © 2011-2022 走看看