computeScroll函数的理解

某某的理解

Scroll只是一个滚动动作的动画插入器我们做的一个滚动的动作

分为两个 一个是scrolTo 一个是scrollBy 不管是什么动画 我们最终改变的还是通过父类进行操作 改变子类的scrollX 和scrollY进行操作之前computeScroll

这个函数中 public void computeScroll() {

  if (scroller.computeScrollOffset()) {
     scrollTo(scroller.getCurrX(), 0);
   postInvalidate();这个是点击后动画的效果 这个事通过调用
}
 scroller.startScroll(getScrollX(), 0, delta, 0, Math.abs(delta) * 2);
  invalidate();

 

每一个窗口打开时,默认的整个背景LAYOUT长宽与一个虚拟的scroller保持一致,当scroller移动坐标时

layout可以通过计算scroll移动的横向纵向坐标及距离来引发自己的scroll 这里就是通过computeScroll来计算的

 

然后父类自己调用computeScroll 函数scroller.getCurrX(),返回当前滚动X方向的偏移 因为他每动一下 就要是childview也跟着移动 改变他的scrollx和scrolly  这个主要是由于scroller.startScroll(getScrollX(), 0, delta, 0, Math.abs(delta) * 2); 这个引起的 他会引起childview坐标的变化,他的意图是告诉父view 我要滚动了 在一段时间中 从当前的位置滚动到指定的位置 并且是以scroller的动画进行变化移动。这样父类就告诉子类要改变坐标了  childView 坐标即将变化都要去调用computeScroll方法。

例外一种是不需要scroller 直接监听手势动作 滚动到那 那么就直接调用scrollBy 实时的将视图移动,改变着childView的scrollX与scrollY。子类坐标已将改变之前 就会调用computeScroll这个函数 因为scrollBy是移动一段距离 跟scroller.start都是将要触发  而scrollTo是正在触发 不会调用computeScroll方法  这是自己忽悠自己的 内部机制 我也不知道 但是自己能说的通 我就这么理解了






二 某某的理解

computeScroll:主要功能是计算拖动的位移量、更新背景、设置要显示的屏幕(setCurrentScreen(mCurrentScreen);)。

 

重写computeScroll()的原因

调用startScroll()是不会有滚动效果的,只有在computeScroll()获取滚动情况,做出滚动的响应

 

computeScroll在父控件执行drawChild时,会调用这个方法



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值