android scroller

来源:互联网 发布:mac怎么登陆远程桌面 编辑:程序博客网 时间:2024/06/09 23:13

view滚动的辅助类,作用是计算滚动的距离,而不是用它来滚动View,虽然也是android.widget,不要把它误认为是scrollView

每个View都可以移动,都有scrollTo()【根据初始位置移动】、scrollBy()【根据当前位置移动】方法

View移动的坐标系与View的坐标系相反,比如向下移动60——view.scrollTo(0,-60),View向下是Y轴的正坐标,而向正坐标方向移动60,居然用的是-60

scroller一般用在自定义ViewGroup上,在onLayout方法中,ViewGroup把一部分子View,放到ViewGroup的边界外面,使他们无法显示,再通过手指滑动来显示这些子View,隐藏原来显示的子View
手指滑动时再ViewGroup中的onTouchEvent中,用ViewGroup的scrollBy来控制移动,当松开手指后,需要ViewGroup实现自动移动回原先位置,或者自动移动到结尾,这个自动滚动就由scroller来控制

具体参看
Android Scroller完全解析,关于Scroller你所需知道的一切
Android Scroller大揭秘

这里来简单看看怎么用这个东西,下面是自定义View中关于松开手指后自动滚动的逻辑

Overridepublic boolean onTouchEvent(MotionEvent event) {    switch (event.getAction()) {        //.......        case MotionEvent.ACTION_UP:            //.......            //startScroll作用是设置滚动的起始位置,结束位置,和滚动时间            //这里没有设置滚动时间,就是使用默认的滚动时间,250毫秒            mScroller.startScroll(getScrollX(), 0, dx, 0);            //该方法会重绘View,onDraw和computeScroll会被重新调用            invalidate();            break;    }    return super.onTouchEvent(event);}@Overridepublic void computeScroll() {    //computeScrollOffset:根据时间的流逝计算当前需要滚动的距离,并返回一个boolean值,true表示当前滚动还没结束    if (mScroller.computeScrollOffset()) {        //如果当前滚动还没结束,取出先前计算的滚动距离,调用View的scrollTo方法,滚动这个自动以View        scrollTo(mScroller.getCurrX(), mScroller.getCurrY());        invalidate();    }}
原创粉丝点击