首页
学习
活动
专区
圈层
工具
发布

Scroller简介

. */ public void computeScroll() { } 通过注释我们可以看到该方法又父类调用根据滚动的值去更新View,在使用Scroller的时候通常都要实现该方法。...继续往下跟发现在draw()方法中回去调用computeScroll(),而draw()方法会在父布局调用drawChild()的时候使用。...具体关联 通过上面两步大体能得到Scroller与View的移动要通过computeScroll()来完成,但是在究竟如何进行代码实现。...所以我们可以在computeScroll()方法中去判断一下当前是否已经滚动完成,如果没有滚动完成, 我们就去不断的获取当前Scroller的位置,根据这个位置,来把相应的View移动到这里。...所以我们调用invalidate方法去请求重绘,这样父类就会调用computeScroll postInvalidate(); } }

76390
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    深入解析Scroller滚动原理

    ()方法,下面的代码基本是不会变化的: @Override public void computeScroll() { super.computeScroll(); if (mScroller.computeScrollOffset...我们可以这样理解:首先在startScroll()设置好了一堆初始值,之后调用了invalidate();让View重新绘制,这里又有一个很重要的点,在draw()中会调用computeScroll()...而在View类里面的computeScroll()是一个空的方法,需要我们去实现: /** * Called by a parent to request that a child update its...() { } 而在上面“三部曲”的第二部中,我们就已经实现了computeScroll()。...之后又调用了postInvalidate();,让View重绘并重新调用computeScroll()以此循环下去,一直到View滚动到指定位置为止,至此Scroller滚动结束。

    1K10

    onTouchEvent(二) 使用Scroller实现黏性滑动的ScrollView

    view 首先看看我们需要做些什么,自定义View要复写的方法有好几个,我们要复写的有: 1. onMeasure() 2. onLayout() 3. onTouchEvent() 4. computeScroll...void startScroll(int startX, int startY, int dx, int dy, int duration) 自己设定操作的时间,上面那个重载是用得默认值250. computeScroll...computeScroll()是一个空实现的函数,父控件调用用于更新子View,操作的是mScrollX和mScrollY,也就是移动偏移量。 ?...首先onTouchEvent()中调用了Scroller.startScroll()方法,该方法不涉及UI操作所以在后面调用了一次invalidate()让View去重绘,根据上面的computeScroll...既然手动调用invalidate()就会重绘,也就会调用到computeScroll(),里面再判断Scroller的差值计算是否完毕,未完毕则继续移动就这样循环直至偏移到最终坐标。

    1.2K30

    View的滑动实现方式

    ---- 弹性滑动Scroller 我们在 View的基础知识介绍 中有介绍 Scroller 的用法,再重新回顾下: 创建一个Scroller; 重写 view 的 computeScroll 方法;...super(context, attrs); mScroller = new Scroller(context); } @Override public void computeScroll...mDurationReciprocal = 1.0f / (float) mDuration; } 然后通过在 smoothScrollTo 调用 invalidate() 方法,通过 invalidate() 触发重绘,来调用 computeScroll...我们大致知道了 Scroller实现滑动的原理为: 我们通过 Scroller 的 startScroll() 来设置要滑动的位置, 然后通过 invalidate() 触发重绘 来调用 View 的 computeScroll...所以实际上 Scroller 本身并不能实现View的滑动,他需要配合View的 computeScroll() 方法才能达到平滑滑动的效果。

    48120

    一起撸个简单粗暴的Tv应用主界面的网格布局控件(下)

    这就是为什么,大伙在网上搜 OverScroller 的使用教程时,基本每一篇都会提到说 OverScroller 需要跟 View 的 computeScroll() 一起使用的原因。...computeScroll() 是 View 中的一个空方法,在 draw() 方法中被调用。...所以,只要我们能够让需要滑动的 View 在滑动的这段时间内,每一帧都通知 View 进行重绘刷新,那么它每一帧就都会走到 computeScroll(),这样我们就可以在 computeScroll(...因为我们只有通知了 View 需要重绘,computeScroll() 才会被调用,才可以再手动去通知 OverScroller 进行工作。...因此我们需要在每一帧的屏幕刷新信号事件中手动去通知 OverScroller 进行工作,并取得经过它计算得到的当前帧的滑动进度来手动应用到 View 上 这就是为什么使用 OverScroller 需要结合 View#computeScroll

    1.1K80
    领券