OverScroll&&VelocityTracker 自定义V

2020-01-13  本文已影响0人  陌丶西

title: OverScroll&&VelocityTracker


参考:

OverScroll && VelocityTracker

其实这两个类都是滑动的辅助工具类,其并不是内部主动调用滑动的,滑动需要自己进行scrollTo()或者scrollBy()的移动,其内部会有回调
对应的x,y坐标,和滑动的距离,和当前的位置,然后我们根据其返回的应该滑动到的位置进行滑动处理

OverScroll API

原生View方法

前面也说了以上都是协助滑动的方法,并不能让View滑动,View滑动还需自己通过ScrollTo()或者scrollBy(),这种滑动需要计算好别越界处理。但是有一个方法是内部View原生
计算好的封装方法:overScrollBy();

picture

onOverScrolled(int scrollX, int scrollY,boolean clampedX, boolean clampedY)

View的回调重写方法:overScrollBy()方法执行的内部回调函数,
scrollX : 移动的距离、New X scroll value in pixels、、也就是最新的移动后的X轴上的距离  getScrollX()
clampedX: x轴上的移动位置是否完成,也就是有没有到达上边overScrollBy()函数设置值的回调
        
        @Override
        protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
            int oldScrollX = getScrollX();
            int oldScrollY = getScrollY();
            setScrollX(scrollX);
            onScrollChanged(scrollX, scrollY, oldScrollX, oldScrollY);
        
        }   
picture

onScrollChanged(int l, int t, int oldl, int oldt);

每次内部调用scrollTo()、scrollby()方法时都会执行该onScrollChanged()方法,内部函数会返回当前坐标和上一次坐标,从而view会判断是往哪个方向移动

VelocityTracker

computeScroll()

         /**
          * Called by a parent to request that a child update its values for mScrollX
          * and mScrollY if necessary. This will typically be done if the child is
          * animating a scroll using a {@link android.widget.Scroller Scroller}
          * object.
          */
          
也就是通过对象Scroller或者是其子类OverScroller执行需要改变ScrollX\scrollY的操作时,会被调用,会被回调
,so,上边的startScroll()\fling()\springBack()等Api的真时调用滑动的方法都是在computerScroll()的回调函数中做的
picture
上一篇下一篇

猜你喜欢

热点阅读