Scroller和OverScroller

1、ViewDragHelperhtml

一、是对子View进行拖拽操做,利用Scroller计算的记过,经过View.offsetLeftAndRight()

或者View.offsetTopAndBottom()方法改变childView的位置。

二、GroupView自己并不滚动,没有使用scrollTo或者scrollBy方法滚动GroupView自己

三、Scroller用的也是兼容包里面的,根据版本的不一样使用Scroller或者OverScroller。

2、OverScroller 参考ScrollViewandroid

一、基本功能是Scroller差很少, 可是能够滚动超出View自己内容的范围

二、部分系统组件已经支持OverScrollMode,须要设置View.setOverScrollMode(OVER_SCROLL_ALWAYS)

而且重载overScrollBy才能生效,参考
[Android的ListView ScrollView支持回弹效果](http://www.race604.com/android-listview-scrollview-bouncing)

三、在onTouchEvent.move和computeScroll()中调用View.overScrollBy方法,View.overScrollBy

方法中根据是不是OVER_SCROLL_ALWAYS模式来计算maxOverScrollY,View.overScrollBy根据计算

的新的滚动位置调用View.onOverScrolled回调方法,子类须要实现该方法,若是

Scroller.isFinished()==true,说明正在拖拽,调用super.scrollTo( scrollX, scrollY )

继续滚动,不然认为是手已经release了,正在scroll或者fling过程当中,也是调用super.scrollTo

( scrollX, scrollY )继续滚动 ,可是到了maxOverScrollY 时,调用Scroller.springBack回弹。

四、在onTouchEvent.up根据当前速度是否继续滚动仍是调用Scroller.springBack回弹,

在onToucheEvent.cancel中也调用Scroller.springBack回弹。我的感受Scroller.springBack没什么用,

这里调用Sroller.startScroll或者Sroller.fling也能够达到相同的效果。

五、Scroller.springBack(int startX, int startY, int minX, int maxX, int minY, int maxY)

方法,minX和minY通常是0,maxY和maxY是可滚动区域, 好比ScrollView是 

Math.max(0,  child.getHeight() - (getHeight() - mPaddingBottom - mPaddingTop));

[这个例子](http://www.cnblogs.com/chyl411/p/3847930.html) 由于自己不具有滚动,因此是0。
相关文章
相关标签/搜索