我們在需求實現時,經常遇到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 前兩種方式我們還是挺熟悉的,不但見得挺多的而且還經常使用 至於最後一種方式,可能就要相對陌...