?
本文檔使用 PHP中文網(wǎng)手冊(cè) 發(fā)布
Scroller
版本:Android 2.3 r1
?
public class Scroller extends Object
?
java.lang.Object
?? ? android.widget.Scrolle
?
類概述
這個(gè)類封裝了滾動(dòng)操作。滾動(dòng)的持續(xù)時(shí)間可以通過構(gòu)造函數(shù)傳遞,并且可以指定滾動(dòng)動(dòng)作的持續(xù)的最長(zhǎng)時(shí)間。經(jīng)過這段時(shí)間,滾動(dòng)會(huì)自動(dòng)定位到最終位置,并且通過computeScrollOffset()會(huì)得到的返回值為false,表明滾動(dòng)動(dòng)作已經(jīng)結(jié)束。
?
構(gòu)造函數(shù)
public Scroller (Context context)
使用缺省的持續(xù)持續(xù)時(shí)間和動(dòng)畫插入器創(chuàng)建一個(gè)Scroller。(譯者注:interpolator這里翻譯為動(dòng)畫插入器,見這里。)
?
public Scroller (Context context, Interpolator interpolator)
根據(jù)指定的動(dòng)畫插入器創(chuàng)建一個(gè)Scroller,如果指定的動(dòng)畫插入器為空,則會(huì)使用缺省的動(dòng)畫插入器(粘滯viscous)創(chuàng)建。
?
公共方法
public void abortAnimation ()
停止動(dòng)畫。與forceFinished(boolean)相反,Scroller滾動(dòng)到最終x與y位置時(shí)中止動(dòng)畫。
參見
forceFinished(boolean)
?
public boolean computeScrollOffset ()
當(dāng)想要知道新的位置時(shí),調(diào)用此函數(shù)。如果返回true,表示動(dòng)畫還沒有結(jié)束。位置改變以提供一個(gè)新的位置。
?
public void extendDuration (int extend)
延長(zhǎng)滾動(dòng)動(dòng)畫時(shí)間。此函數(shù)允許當(dāng)使用setFinalX(int) or setFinalY(int) 時(shí),卷動(dòng)動(dòng)作持續(xù)更長(zhǎng)時(shí)間并且卷動(dòng)更長(zhǎng)距離。
?????????????????? 參數(shù)
??????????????????????????? extend????? 卷動(dòng)事件延長(zhǎng)的時(shí)間,以毫秒為單位
?????????????????? 參見
??????????????????????????? setFinalX(int)
??????????????????????????? setFinalY(int)
?
public void fling (int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY)
在fling(譯者注:快滑,用戶按下觸摸屏、快速移動(dòng)后松開)手勢(shì)基礎(chǔ)上開始滾動(dòng)。滾動(dòng)的距離取決于fling的初速度。
???????? 參數(shù)
?????????????????? startX?????? 滾動(dòng)起始點(diǎn)X坐標(biāo)
startY?????? 滾動(dòng)起始點(diǎn)Y坐標(biāo)
velocityX? 當(dāng)滑動(dòng)屏幕時(shí)X方向初速度,以每秒像素?cái)?shù)計(jì)算
velocityY? 當(dāng)滑動(dòng)屏幕時(shí)Y方向初速度,以每秒像素?cái)?shù)計(jì)算
minX???????? X方向的最小值,scroller不會(huì)滾過此點(diǎn)。
maxX??????? X方向的最大值,scroller不會(huì)滾過此點(diǎn)。
minY???????? Y方向的最小值,scroller不會(huì)滾過此點(diǎn)。
maxY??????? Y方向的最大值,scroller不會(huì)滾過此點(diǎn)。
?
public final void forceFinished (boolean finished)
強(qiáng)制終止的字段到特定值。(譯者注:立即停止?jié)L動(dòng)?)
???????? 參數(shù)
?????????????????? finished??? 新的結(jié)束值
?
public final int getCurrX ()
返回當(dāng)前滾動(dòng)X方向的偏移
???????? 返回值
?????????????????? 距離原點(diǎn)X方向的絕對(duì)值
?
public final int getCurrY ()
返回當(dāng)前滾動(dòng)Y方向的偏移
???????? 返回值
?????????????????? 距離原點(diǎn)Y方向的絕對(duì)值
?
public final int getDuration ()
返回滾動(dòng)事件的持續(xù)時(shí)間,以毫秒計(jì)算。
???????? 返回值
?????????????????? 滾動(dòng)持續(xù)的毫秒數(shù)
?
public final int getFinalX ()
返回滾動(dòng)結(jié)束位置。僅針對(duì)“fling”手勢(shì)有效
???????? 返回值
?????????????????? 最終位置X方向距離原點(diǎn)的絕對(duì)距離
?
public final int getFinalY ()
返回滾動(dòng)結(jié)束位置。僅針對(duì)“fling”操作有效
???????? 返回值
?????????????????? 最終位置Y方向距離原點(diǎn)的絕對(duì)距離
?
public final int getStartX ()
返回滾動(dòng)起始點(diǎn)的X方向的偏移
???????? 返回值
?????????????????? 起始點(diǎn)在X方向距離原點(diǎn)的絕對(duì)距離
?
public final int getStartY ()
返回滾動(dòng)起始點(diǎn)的Y方向的偏移
???????? 返回值
?????????????????? 起始點(diǎn)在Y方向距離原點(diǎn)的絕對(duì)距離
?
public final boolean isFinished ()
返回scroller是否已完成滾動(dòng)。
???????? 返回值
?????????????????? 停止?jié)L動(dòng)返回true,否則返回false
?
public void setFinalX (int newX)
設(shè)置scroller的X方向終止位置
???????? 參數(shù)
?????????????????? newX??????? 新位置在X方向距離原點(diǎn)的絕對(duì)偏移。
???????? 參見
??????? extendDuration(int)
??????? setFinalY(int)
?
public void setFinalY (int newY)
設(shè)置scroller的Y方向終止位置
???????? 參數(shù)
?????????????????? newY??????? 新位置在Y方向距離原點(diǎn)的絕對(duì)偏移。
??? 參見
??????? extendDuration(int)
??????? setFinalY(int)
?
public void startScroll (int startX, int startY, int dx, int dy)
以提供的起始點(diǎn)和將要滑動(dòng)的距離開始滾動(dòng)。滾動(dòng)會(huì)使用缺省值250ms作為持續(xù)時(shí)間。
??? 參數(shù)
?????????????????? startX?????? 水平方向滾動(dòng)的偏移值,以像素為單位。正值表明滾動(dòng)將向左滾動(dòng)
startY?????? 垂直方向滾動(dòng)的偏移值,以像素為單位。正值表明滾動(dòng)將向上滾動(dòng)
dx???? 水平方向滑動(dòng)的距離,正值會(huì)使?jié)L動(dòng)向左滾動(dòng)
dy???? 垂直方向滑動(dòng)的距離,正值會(huì)使?jié)L動(dòng)向上滾動(dòng)
?
public void startScroll (int startX, int startY, int dx, int dy, int duration)
以提供的起始點(diǎn)和將要滑動(dòng)的距離開始滾動(dòng)。
??? 參數(shù)
?????????????????? startX?????? 水平方向滾動(dòng)的偏移值,以像素為單位。正值表明滾動(dòng)將向左滾動(dòng)
startY?????? 垂直方向滾動(dòng)的偏移值,以像素為單位。正值表明滾動(dòng)將向上滾動(dòng)
dx???? 水平方向滑動(dòng)的距離,正值會(huì)使?jié)L動(dòng)向左滾動(dòng)
dy???? 垂直方向滑動(dòng)的距離,正值會(huì)使?jié)L動(dòng)向上滾動(dòng)
duration?? 滾動(dòng)持續(xù)時(shí)間,以毫秒計(jì)。
?
public int timePassed ()
返回自滾動(dòng)開始經(jīng)過的時(shí)間
??? 返回值
??????? 經(jīng)過時(shí)間以毫秒為單位
?
補(bǔ)充
??? 文章精選
??????? Scroller 粗淺理解
??????? ScrollTextView - scrolling TextView for Android
??? 示例代碼
創(chuàng)建工程MyScroler,或者將下類名“MyScroler”改為自己創(chuàng)建的工程,將下面代碼直接覆蓋生成的.java文件運(yùn)行即可
?
package my.Scroller;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Scroller;
?
public class MyScroler extends Activity {
???
??? LinearLayout lay1,lay2,lay;
???? private Scroller mScroller;
???? private boolean s1,s2;
??? @Override
??? public void onCreate(Bundle savedInstanceState) {
??????? super.onCreate(savedInstanceState);
??????? mScroller = new Scroller(this);
???????? lay1 = new LinearLayout(this){
???????????? @Override
???????????? public void computeScroll() {
???????????????? if (mScroller.computeScrollOffset()) {
???????????????????? scrollTo(mScroller.getCurrX(), 0);
???????????????????? postInvalidate();
???????????????? }
???????????? }
???????? };
???????? lay2 = new LinearLayout(this){
??? ?????????@Override
???????????? public void computeScroll() {
???????????????? if (mScroller.computeScrollOffset()) {
??????????????????? // mScrollX = mScroller.getCurrX();
???????????????????? scrollTo(mScroller.getCurrX(), 0);
???????????????????? postInvalidate();
???????????????? }
???????????? }
???????? };
????? lay1.setBackgroundColor(this.getResources().getColor(android.R.color.darker_gray));
??????? lay2.setBackgroundColor(this.getResources().getColor(android.R.color.white));
??????? lay = new LinearLayout(this);
??????? lay.setOrientation(LinearLayout.VERTICAL);
??????? LinearLayout.LayoutParams p0 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);????
??????? this.setContentView(lay, p0);
???????
??????? LinearLayout.LayoutParams p1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);????
??????? p1.weight=1;
??????? lay.addView(lay1,p1);
??????? LinearLayout.LayoutParams p2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);????
??????? p2.weight=1;
??????? lay.addView(lay2,p2);
??????? Button tx = new Button(this);
??????? Button tx2 = new Button(this);
??????? tx.setText("Button1");?
??????? tx2.setText("Button2");
??????? tx.setOnClickListener(new OnClickListener(){
??????????? @Override
??????????? public void onClick(View v) {
??????????????? if(!s1){
??????????????????? mScroller.startScroll(0, 0, 5, 10, 10);
??????????????????? s1 = true;
??????????????? }else{
??????????????????? mScroller.startScroll(0, 0, -50, -10,10);
??????????????????? s1 = false;
??????????????? }
??????????? }
???????????
??????? });
??????? tx2.setOnClickListener(new OnClickListener(){
??????????? @Override
??????????? public void onClick(View v) {
??????????????? if(!s2){
??????????????????? mScroller.startScroll(0, 0, 5, 20,10);
??????????????????? s2=true;
??????????????? }else{
??????????????????? mScroller.startScroll(20, 20, -50, -20,10);
??????????????????? s2=false;
??????????????? }
??????????? }
??????? });
??????? lay1.addView(tx);
??????? lay2.addView(tx2);
??? }
}