翻译自:http://developer.android.com/reference/android/widget/Scroller.html
android.widget.Scroller是用于模拟scrolling行为,它是scrolling行为的一个帮助类。通过它的startScroll(intstartX, intstartY, intdx, 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代表起点,
intvelocityX, int velocityY代表初速度,
intminX, int maxX, intminY, 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开始到现在已经失去的时间
|
示例代码
创建工程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);
}
}