zoukankan      html  css  js  c++  java
  • 解决ScrollView嵌套viewpager滑动事件冲突问题

    重写ScrollView

    第一种方案能解决viewpager的滑动问题,但是scrollView有时会滑不动

    public class VerticalScrollView extends ScrollView {
    
        private GestureDetector mGestureDetector;
    
        public VerticalScrollView(Context context, AttributeSet attrs){
            super(context, attrs);
            mGestureDetector = new GestureDetector(context, new YScrollDetector());
        }
    
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
        }
    
        class YScrollDetector extends SimpleOnGestureListener {
    
            @Override
            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                /**
                 * if we're scrolling more closer to x direction, return false, let subview to process it
                 */
                HBLog.i("VerticalScrollView", distanceY+"----"+distanceX);
                return (Math.abs(distanceY) > Math.abs(distanceX));
            }
        }
    
    }

    第二种方案能够解决上面的问题

    public class VerticalScrollView extends ScrollView {
    
        private float xDistance, yDistance, xLast, yLast; 
    
        public VerticalScrollView(Context context) { 
            super(context); 
        } 
    
        public VerticalScrollView(Context context, AttributeSet attrs) { 
            super(context, attrs); 
        } 
    
        public VerticalScrollView(Context context, AttributeSet attrs, int defStyle) { 
            super(context, attrs, defStyle); 
        } 
    
        @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); 
        }
    
    }
  • 相关阅读:
    Vue.js+express建站
    单页应用(SPA)简介
    Z形记之CentOS7
    Z形记之比较两个目录下文件异同
    Z形记之Linux的那些事:安装Nginx
    SQL之修改字段类型
    Scrapy系列之爬取豆瓣电影
    Scrapy和MongoDB的应用---爬取
    BigDecimal类的常用算法
    回到顶部功能
  • 原文地址:https://www.cnblogs.com/kelina2mark/p/5238095.html
Copyright © 2011-2022 走看看