<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Scroller s=new Scroller(Context con);</span>
这个类里面有一个scroller.startScroll(startX, startY, disX, disY, duration);这样的方法
第一个参数是要移动的初始位置X坐标的值,
第一个参数是要移动的初始位置Y坐标的值,
第三个参数是要移动的X坐标的距离;
第四个参数是要移动Y坐标的距离,
第五个是移动的时间,
注意:在ViewGroup里面,坐标和平常的坐标是相反的,还是以左上角为原点,x轴往右有负,往左为正,Y轴往上为正,往下为负
调用完这个方法还没用,还要调用invalidate这个方法来刷新界面,
调用完这个方法后,又会导致另一个方法的回调,那就是public void computeScroll();
这是一个回调函数,
/**
* 执行invalidate方法后回调
*/
@Override
public void computeScroll() {
// TODO Auto-generated method stub
super.computeScroll();
//判断一下滑动完了没有,返回true表示还没,没有的话则继续执行,false表示滑动完成,
if(scroller.computeScrollOffset()){
scrollTo(scroller.getCurrX(), scroller.getCurrY());
invalidate();
}
}
在这个回调函数里面,调用Scroller类的 computeScrollOffset()方法,这个方法是判断滑动完成了没有,返回值为true,便是还没完成,于是,我们就获取当前的位置,继续滑动
上点代码吧
public class MyRelativeLayout extends RelativeLayout {
Scroller scroller;
public MyRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
scroller=new Scroller(context);
}
public void myscrollto(int startX,int startY,int disX,int disY,int duration){
scroller.startScroll(startX, startY, disX, disY, duration);
invalidate();
}
/**
* 执行invalidate方法后回调
*/
@Override
public void computeScroll() {
// TODO Auto-generated method stub
super.computeScroll();
//判断一下滑动完了没有,返回true表示还没,没有的话则继续执行,false表示滑动完成,
if(scroller.computeScrollOffset()){
scrollTo(scroller.getCurrX(), scroller.getCurrY());
invalidate();
}
}
}