scroller类的用法

读安卓群英传滑动机制之-=------==========scroller

scroller类其实作用和scrollBy、scrollTo的作用是差不多的,区别就是通过scroller移动可以有一个缓冲动画,并不是一下就从起点到终点了。说到这里,就顺便说下scrollBy,scrollTo,


=========scrollBy,scrollTo

 注意,这两个方法移动的是内容:

   在viewGroup中,移动的就是其所有的子控件,同时,可以通过((View)getParent()).getScrollX()来获取子控件在viewGroup中的滑动坐标;

 在view中,移动的就是内容,譬如TextView中移动的就是文本,在ImageView中移动的就是图片

另外,需要注意的是这两个方法移动的都是坐标系


===Scroller

调用scroller的基本步骤

1.初始化

mScroller = new Scroller(context);

2.重写view或者ViewGoup的computeScroll()方法实现模拟滑动,这个方法在onDraw中调用的,这个方法也是scroller用法的核心,通过不断的移动一小段达到平滑移动的效果

@Override
    public void computeScroll() {//该方法在onDraw中调用,实现模拟滑动,只有在这个方法中能够获取到模拟过程中的scrollx,与scrolly,所以必须要复写这个方法
        super.computeScroll();
        if (mScroller.computeScrollOffset()) {//scroller是否执行完毕
            ((View) getParent()).scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
            invalidate();
        }
    }
注意的是需要调用invalidate()来请求重绘,从而不断来调用computeScroll(),从而递归直到滑动完成。getCurrX(),getCurrY()分别是获取到当前滑动坐标。


3.开启模拟过程

 View viewGroup = (View) getParent();
                mScroller.startScroll(viewGroup.getScrollX(), viewGroup.getScrollY(), -viewGroup.getScrollX(), -viewGroup.getScrollY());这里是通过父控件来获取view的滑动坐标
                invalidate();


 这里需要注意到也调用了invalidate()方法,这样通知view重绘才能调用到computeScroll()方法 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值