android 的scroller的使用

理解

我把scroller理解為滾動數據攜帶器,他只是一個記錄滾動數據的工具,并不顯示view的滾動效果,其實這點我覺得和安卓的屬性動畫挺像,他只提供數據,具體要怎么做,就看你的了。

scroller的兩個重要方法

1.mScroller.startScroll(0, 0, 0, 0, 1000)

前面的兩個參數是起始坐標x,y,中間兩個參數是對應的偏移量,最后一個參數是執行時間。

2.mScroller.computeScrollOffset()

判斷是否完成滾動,這個函數會一直返回false,直到滾動完畢返回true。

獲取Scroller攜帶的位置數據

mScroller.getCurrX() //獲取mScroller當前水平滾動的位置
mScroller.getCurrY() //獲取mScroller當前豎直滾動的位置
mScroller.getFinalX() //獲取mScroller最終停止的水平位置
mScroller.getFinalY() //獲取mScroller最終停止的豎直位置
mScroller.setFinalX(int newX) //設置mScroller最終停留的水平位置,沒有動畫效果,直接跳到目標位置
mScroller.setFinalY(int newY) //設置mScroller最終停留的豎直位置,沒有動畫效果,直接跳到目標位置

使用

ViewGroup中有個computeScroll方法,ontouch或invalidate()或postInvalidate()都會導致這個方法的執行,
所以我們可以手動執行ViewGroup方法,同時再computeScroll中執行postInvalidate(),這就會形成一個循環,我們在這個循環中調用ViewGroup的scrollTo方法更新位置信息,同時使用mScroller.computeScrollOffset()方法監聽滾動是否完畢。

public class MyView extends LinearLayout {
    private boolean s1 = true;
    Scroller mScroller = null;

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mScroller = new Scroller(context);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void computeScroll() {
        if (mScroller.computeScrollOffset()) {
            scrollTo(mScroller.getCurrX(), 0);
            postInvalidate();
        }
    }
   //需要手動執行這個方法
    public void beginScroll() {
        if (!s1) {
            mScroller.startScroll(0, 0, 0, 0, 1000);
            s1 = true;
        } else {
            mScroller.startScroll(0, 0, 500, 0, 1000);
            s1 = false;
        }
        invalidate();
    }

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容