转载请注明出处:http://blog.csdn.net/xiaohao0724/article/details/56486082
我们先来看一下Scroller类里面的一些方法:
startScroll(int startX, int startY, int dx, int dy, int duration)
用来开始滚动,设置之后就可以在computeScroll()方法里面通过getCurrX()、getCurrY()获取到当前的滚动信息。
startX:开始滚动前的X坐标位置
startY:开始滚动前的Y坐标位置
dx:最终滑动到的X坐标位置
dy:最终滑动到的Y坐标位置
duration:起点到终点使用的时长
注意:X轴在原点左边为正右边为负,Y轴在原点上边为正下边为负
computeScrollOffset()
判断当前的滑动动作是否完成
getCurrX() 获取当前滑动的X坐标值
getCurrY() 获取当前滑动的Y坐标值
getFinalX() 获取最终滑动停止时的坐标
isFinished() 判断当前滚动是否结束
下面来看个使用Scroller的Demo先来看效果:
先自定义布局ScrollerLayout
public class ScrollerLayout extends LinearLayout {
private static final String TAG = "Havorld";
private final Scroller scroller;
public ScrollerLayout(Context context, AttributeSet attrs) {
super(context, attrs);
scroller = new Scroller(context);
}
public void goScroll() {
scroller.startScroll(getScrollX(), getScrollY(), 0, -200, 2000);
invalidate(); // 重绘界面,这个方法会调用computeScroll方法
}
// 容器重新绘制自己的孩子时,它会调用孩子的computScroll方法
@Override
public void computeScroll() {
if (scroller.computeScrollOffset()) {// 判断滑动动作是否完成
// 当前滑动的纵坐标值
Log.e(TAG, "getCurrY():" + scroller.getCurrY());
scrollTo(scroller.getCurrX(), scroller.getCurrY());
invalidate();
}
}
}
<com.havorld.scrollerdemo.view.ScrollerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.havorld.scrollerdemo.MainActivity" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="start"
android:text="移动" />
</com.havorld.scrollerdemo.view.ScrollerLayout>
public class MainActivity extends Activity {
private ScrollerLayout scrollerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
scrollerLayout = (ScrollerLayout) findViewById(R.id.layout);
}
public void start(View v) {
scrollerLayout.goScroll();
}
}
注意:通过Scroller移动的是控件里面的内容,并不是控件本身。