android scroller

android scroller,view滾動的輔助類,作用是計算滾動的距離,而不是用它來滾動View,雖然也是android.widget,不要把它誤認為是scrollView。

每個View都可以移動,都有scrollTo()【根據初始位置移動】、scrollBy()【根據當前位置移動】方法

View移動的坐標系與View的坐標系相反,比如向下移動60——view.scrollTo(0,-60),View向下是Y軸的正坐標,而向正坐標方向移動60,居然用的是-60

scroller一般用在自定義ViewGroup上,在onLayout方法中,ViewGroup把一部分子View,放到ViewGroup的邊界外面,使他們無法顯示,再通過手指滑動來顯示這些子View,隱藏原來顯示的子View
手指滑動時再ViewGroup中的onTouchEvent中,用ViewGroup的scrollBy來控制移動,當松開手指後,需要ViewGroup實現自動移動回原先位置,或者自動移動到結尾,這個自動滾動就由scroller來控制

這裡來簡單看看怎麼用這個東西,下面是自定義View中關於松開手指後自動滾動的邏輯

Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        //.......
        case MotionEvent.ACTION_UP:
            //.......
            //startScroll作用是設置滾動的起始位置,結束位置,和滾動時間
            //這裡沒有設置滾動時間,就是使用默認的滾動時間,250毫秒
            mScroller.startScroll(getScrollX(), 0, dx, 0);
            //該方法會重繪View,onDraw和computeScroll會被重新調用
            invalidate();
            break;
    }
    return super.onTouchEvent(event);
}

@Override
public void computeScroll() {
    //computeScrollOffset:根據時間的流逝計算當前需要滾動的距離,並返回一個boolean值,true表示當前滾動還沒結束
    if (mScroller.computeScrollOffset()) {
        //如果當前滾動還沒結束,取出先前計算的滾動距離,調用View的scrollTo方法,滾動這個自動以View
        scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
        invalidate();
    }
}

You May Also Like