美文网首页
关于ScrollView的若干问题,比如嵌套view然后失去惯性

关于ScrollView的若干问题,比如嵌套view然后失去惯性

作者: minminaya | 来源:发表于2017-06-26 00:26 被阅读113次

    目录

    1.scrollView嵌套RecyclerView失去惯性滑动

    2.关于起始位置不是scrollview顶部


    一 scrollView嵌套RecyclerView失去惯性滑动

    出现这种问题只要把滑动事件屏蔽就可以了

    
    public class MyScrollview extends ScrollView {
        private int downX;
        private int downY;
        private int mTouchSlop;
    
    
    
        public MyScrollview(Context context) {
            super(context);
            mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
        }
    
        public MyScrollview(Context context, AttributeSet attrs) {
            super(context, attrs);
            mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
        }
    
        public MyScrollview(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
        }
    
        @Override
        public boolean onInterceptTouchEvent(MotionEvent e) {
            int action = e.getAction();
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    downX = (int) e.getRawX();
                    downY = (int) e.getRawY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    int moveY = (int) e.getRawY();
                    if (Math.abs(moveY - downY) > mTouchSlop) {
                      //如果有滑动了,则屏蔽滑动事件
                        return true;
                    }
            }
            return super.onInterceptTouchEvent(e);
        }
    }
    

    TouchSlop是处理触摸事件中的一个常量,被系统认为滑动和点击事件的临界点。
    理解这个touchSlop是一个滑动距离值的常量,也就是说当我们手触摸在屏幕上滑动时,如果滑动距离没有超过touchSlop值的话 ,android系统本身是不会认为我们在屏幕上做了手势滑动,因此只有当我们在屏幕上的滑动距离超过touchSlop值时,android系统本身才 会认为我们做了滑动操作并去响应触摸事件,不过要注意的是不同的设备,touchSlop的值可能是不同的,一切以函数获取为准。

    最后将布局文件中的xml引用改为MyScrollview 即可


    二 关于起始位置不是scrollview顶部

    这是因为内部也许有gridview,listview,Recycleview等,他们默认获取了焦点,你只要把焦点去掉,比如Recycleview,在code中

    mRecycleview.setFocusable(false);
    

    当然你可以使用scrollview的方法,

    mScrolleView.smoothScrollTo(x, y)
    

    相关文章

      网友评论

          本文标题:关于ScrollView的若干问题,比如嵌套view然后失去惯性

          本文链接:https://www.haomeiwen.com/subject/ihhdcxtx.html