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。