很多和滚动啊滑动啊有关的功能,都绕不开一个类,Scroller,如果只是想移动画布的话,在View中就有一些我们可以使用的api, 例如mScrollX,mScrollY,scrollTo(),ScrollBy(),但是这些方法会直接一步到位,所以我们需要scroller来实现平滑的滚动,或者各种骚操作滚动。
在Api19,Google爸爸新引入了OverScroller,相比之下,多了处理超越边界的方法,所以我们只看新类的源码就好。
先看下OverScroller类的public方法和属性,见下图。
方法和属性分析
构造器中,初始化了两个主要的组件。
public OverScroller(Context context, Interpolator interpolator, boolean flywheel) {
if (interpolator == null) {
mInterpolator = new Scroller.ViscousFluidInterpolator();
} else {
mInterpolator = interpolator;
}
mFlywheel = flywheel;
mScrollerX = new SplineOverScroller(context);
mScrollerY = new SplineOverScroller(context);
}
一个是ViscousFluidInterpolator,看字面意思是一个插值器,看了下源码灰常复杂的小学四则混合运算,头疼,不过插值器这东西大概是调整速度曲线的吧,什么先快后慢,欲扬先抑,九浅一深之类的,我们先走一遍主流程,所以暂时搁置。
另一个组件SplineOverScroller也是非常重要,主线剧情上很多的函数最后都要靠这个小老弟来实现,不过点进去又是一堆四则混合运算,为了快速通关刷剧情,所以老办法,搁置!
我们是源码分析,所以讲道理应该已经会使用这个类了,But,作为一个资深的api调用师,在分析之前很有必要回想一下,完整的调用流程是什么?
class Api调用师的一个类{
val scroller:OverScroller...
fun 一个名为A的调用{
scroller.startScroll(startX,startY,dx,dy,duration)
invalidate()
}