android.widget.Scroller是用于模拟scrolling行为,它是scrolling行为的一个帮助类。我们通常通过它的 startScroll(int startX, int startY, int dx, int dy, int duration) 函数来设置一个scrolling行为模型,即在 int duration (单位为毫秒)时间的内从int startX, int startY,这个点起向X和Y方向分别滚动 int dx和 int dy 个像素。然后我们可以调用 computeScrollOffset() 计算此时scroll到的位置,并调用 getCurrX() 和 getCurrY() 得到到此时在X和Y方向的位置。
另外我们通常通过它的 fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY) 函数来设置一个fling行为(特殊的scroll)模型,即在在nt startX, int startY,这个点起向X和Y方向分别以 int velocityX 和 int velocityY 个像素的速度进行滚动。然后我们可以调用 computeScrollOffset() 计算此时scroll到的位置,并调用 getCurrX() 和 getCurrY() 得到到此时在X和Y方向的位置。
公共构造函数
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Scroller(Context context)
Create a Scroller with the default duration and interpolator.
|
|||||||||||
Scroller(Context context, Interpolator interpolator)
Create a Scroller with the specified interpolator.
interpolator参数只是在computeScrollOffset()函数中用于对我们的流逝的时间(通过timePassed()取得)这值进行重新解析
|
|||||||||||
Scroller(Context context, Interpolator interpolator, boolean flywheel)
Create a Scroller with the specified interpolator.
interpolator只是在computeScrollOffset()函数中用于对我们的流逝的时间(通过timePassed()取得)这值进行重新解析
|
公共函数
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void | abortAnimation()
Stops the animation.
停止scroll
|
||||||||||
boolean | computeScrollOffset()
Call this when you want to know the new location.
计算scroll的情况
|
||||||||||
void | extendDuration(int extend)
Extend the scroll animation.
增加scroll的时间
|
||||||||||
void | fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY)
Start scrolling based on a fling gesture.
模拟fling形式的scroll行为。
int startX, int startY代表起点,int velocityX, int velocityY代表初速度,int minX, int maxX, int minY, int maxY代表终点的范围
|
||||||||||
final void | forceFinished(boolean finished)
Force the finished field to a particular value.
强制设置为scroll状态
|
||||||||||
float | getCurrVelocity()
Returns the current velocity.
得到当前速度。该值是X方向和Y方向的合成值
|
||||||||||
final int | getCurrX()
Returns the current X offset in the scroll.
得到当前的X坐标
|
||||||||||
final int | getCurrY()
Returns the current Y offset in the scroll.
得到当前的Y坐标
|
||||||||||
final int | getDuration()
Returns how long the scroll event will take, in milliseconds.
得到设置的scroll行为的总时间值
|
||||||||||
final int | getFinalX()
Returns where the scroll will end.
得到scroll行为终点的X值
|
||||||||||
final int | getFinalY()
Returns where the scroll will end.
得到scroll行为终点的Y值
|
||||||||||
final int | getStartX()
Returns the start X offset in the scroll.
得到scroll行为起点的X值
|
||||||||||
final int | getStartY()
Returns the start Y offset in the scroll.
得到scroll行为起点的Y值
|
||||||||||
final boolean | isFinished()
Returns whether the scroller has finished scrolling.
返回scroll行为是否结束
|
||||||||||
void | setFinalX(int newX)
Sets the final position (X) for this scroller.
设置scroll行为的终点的X值
|
||||||||||
void | setFinalY(int newY)
Sets the final position (Y) for this scroller.
设置scroll行为的终点的Y值
|
||||||||||
final void | setFriction(float friction)
The amount of friction applied to flings.
|
||||||||||
void | startScroll(int startX, int startY, int dx, int dy)
Start scrolling by providing a starting point and the distance to travel.
设置一个scrolling行为模型,即在 int duration (单位为毫秒)时间的内从int startX, int startY,这个点起向X和Y方向分别滚动 int dx和 int dy 个像素
|
||||||||||
void | startScroll(int startX, int startY, int dx, int dy, int duration)
Start scrolling by providing a starting point and the distance to travel.
设置一个scrolling行为模型,即在默认时间(250毫秒)内从int startX, int startY,这个点起向X和Y方向分别滚动 int dx和 int dy 个像素
|
||||||||||
int | timePassed()
Returns the time elapsed since the beginning of the scrolling.
取得从scroll开始到现在已经失去的时间
|
示例代码
示例程序来自:http://mengsina.iteye.com/blog/1123339
创建工程MyScroler,或者将下类名“MyScroler”改为自己创建的工程,将下面代码直接覆盖生成的.java文件运行即可:
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 {
/** Called when the activity is first created. */
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);
}
}