Scroller使用分析

2021-07-12 06:04:57 字數 1877 閱讀 3517

我們在需求實現時,經常遇到view滑動的情況,而scrollto、scrollby方法都可以實現view的滑動,但是效果是瞬間完成的,使用者體驗並不好,我們可以使用scroller或者smoothscrollto(內部也是scroller實現的)來實現平滑移動的效果。常見於自定義view中。

mscroller.getcurrx() //獲取mscroller當前水平滾動的位置  

mscroller.getcurry() //獲取mscroller當前豎直滾動的位置

mscroller.getfinalx() //獲取mscroller最終停止的水平位置

mscroller.getfinaly() //獲取mscroller最終停止的豎直位置

mscroller.setfinalx(int newx) //設定mscroller最終停留的水平位置,沒有動畫效果,直接跳到目標位置

mscroller.setfinaly(int newy) //設定mscroller最終停留的豎直位置,沒有動畫效果,直接跳到目標位置

//滾動,startx, starty為開始滾動的位置,dx,dy為滾動的偏移量, duration為完成滾動的時間

mscroller.startscroll(int startx, int starty, int dx, int dy) //使用預設完成時間250ms

mscroller.startscroll(int startx, int starty, int dx, int dy, int duration)

mscroller.computescrolloffset() //返回值為boolean,true說明滾動尚未完成,false說明滾動已經完成。這是乙個很重要的方法,通常放在view.computescroll()中,用來判斷是否滾動是否結束。

scroller的基本用法其實還是比較簡單的,主要可以分為以下幾個步驟:

1. 建立scroller的例項

2. 呼叫startscroll()方法來初始化滾動資料並重新整理介面

3. 重寫computescroll()方法,並在其內部完成平滑滾動的邏輯

使用的難點在於startscroll的引數含義,然後根據引數含義給出合適的值,因為這個過程涉及android中座標計算,所以較為複雜。

// void android.widget.scroller.startscroll(int startx, int starty, int dx, int dy, int duration)

// 第乙個引數是起始移動的x座標值,

// 第二個是起始移動的y座標值,

// 第三個第四個引數都是移到某點的座標值-初始的座標值,即移動的距離值

// 而duration 當然就是執行移動的時間。

public

class

scrollerdragview

extends

view

public

scrollerdragview(context context, attributeset attrs)

private

void

initview(context context)

@override

public

boolean

ontouchevent(motionevent event)

return

true;

}/**

* 這裡不需要特別的理解,只要使用scroller,這裡都是一樣的

*/@override

public

void

computescroll()

}}

Scroller滑動剖析

官方介紹 scroller裡面封裝了滾動操作,並通過收集資料產生滾動動畫 1.scroller的使用mscroller new scroller context public void beginscroll public void computescroll 2.scroller彈性滑動原理分析 ...

scroller 做自己的動畫效果

在介紹scroller類之前,我們先去了解view的scrollby 和scrollto 方法的區別,在區分這兩個方法的之前,我們要先理解view 裡面的兩個成員變數mscrollx,mscrolly,x軸方向的偏移量和y軸方向的偏移量,這個是乙個相對距離,相對的不是螢幕的原點,而是view的左邊緣...

站在原始碼的角度全解Scroller工作機制(一)

在android開發中有多種方式實現view的滑動,常見的有三種如下 1 不斷地修改view的layoutparams 2 採用動畫向view施加位移效果 3 呼叫view的scrollto scrollby 前兩種方式我們還是挺熟悉的,不但見得挺多的而且還經常使用 至於最後一種方式,可能就要相對陌...