android.widget.Scroller是用于模拟scrolling行为,它是scrolling行为的一个帮助类。我们通常通过它的 (int startX, int startY, int dx, int dy, int duration) 函数来设置一个scrolling行为模型,即在 int duration (单位为毫秒)时间的内从int startX, int startY,这个点起向X和Y方向分别滚动 int dx和 int dy 个像素。然后我们可以调用 () 计算此时scroll到的位置,并调用 () 和 () 得到到此时在X和Y方向的位置。
另外我们通常通过它的 (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 个像素的速度进行滚动。然后我们可以调用 () 计算此时scroll到的位置,并调用 () 和 () 得到到此时在X和Y方向的位置。
公共构造函数
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
( context) Create a Scroller with the default duration and interpolator. | |||||||||||
( context, interpolator) Create a Scroller with the specified interpolator. interpolator参数只是在computeScrollOffset()函数中用于 对我们的流逝的时间(通过timePassed()取得 )这值进行重新解析 | |||||||||||
( context, interpolator, boolean flywheel) Create a Scroller with the specified interpolator. interpolator只是在 computeScrollOffset()函数中用于 对我们的流逝的时间(通过 timePassed()取得 )这值进行重新解析 |
公共函数
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void | () Stops the animation. 停止scroll | ||||||||||
boolean | () Call this when you want to know the new location. 计算scroll的情况 | ||||||||||
void | (int extend) Extend the scroll animation. 增加scroll的时间 | ||||||||||
void | (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 | (boolean finished) Force the finished field to a particular value. 强制设置为scroll状态 | ||||||||||
float | () Returns the current velocity. 得到当前速度。该值是 X方向和 Y方向的合成值 | ||||||||||
final int | () Returns the current X offset in the scroll. 得到当前的X坐标 | ||||||||||
final int | () Returns the current Y offset in the scroll. 得到当前的Y坐标 | ||||||||||
final int | () Returns how long the scroll event will take, in milliseconds. 得到设置的scroll行为的总时间值 | ||||||||||
final int | () Returns where the scroll will end. 得到scroll行为终点的X值 | ||||||||||
final int | () Returns where the scroll will end. 得到scroll行为终点的Y值 | ||||||||||
final int | () Returns the start X offset in the scroll. 得到scroll行为起点的X值 | ||||||||||
final int | () Returns the start Y offset in the scroll. 得到scroll行为起点的Y值 | ||||||||||
final boolean | () Returns whether the scroller has finished scrolling. 返回scroll行为是否结束 | ||||||||||
void | (int newX) Sets the final position (X) for this scroller. 设置scroll行为的终点的X值 | ||||||||||
void | (int newY) Sets the final position (Y) for this scroller. 设置scroll行为的终点的Y值 | ||||||||||
final void | (float friction) The amount of friction applied to flings. | ||||||||||
void | (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 | (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 | () 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);
}
}