Scroller类的使用(用来在ViewGroup里面让子view经常优美 的滑动)

<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();
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值