Android View 的弹性滑动: Scroller使用说明

来源:互联网 发布:数据分析师学历 编辑:程序博客网 时间:2024/05/17 23:13

我在实现View滑动的方法总结这篇博客中介绍了View滑动的三种方法,没看过的可以先去看一下。

这篇文章主要讲解View的弹性滑动,即它滑动时会有一个过程,实现方法包括 Scroller、属性动画、使用延迟策略 这三个方法。

实现弹性滑动的思想:将一次大的滑动分成若干次小的滑动,并在一个时间段内完成。

具体方法讲解:

利用Scroller 实现弹性滑动

首先我门要明白getScrollX()、getScrollY()的含义:
getScrollX() 就是当前View的左上角相对于父布局左上角的x轴偏移量;
getScrollY() 就是当前View的左上角相对于父布局左上角的y轴偏移量;

使用Scroller时,要在自定义的ViewGroup中使用,在onTouchEvent()方法中调用我们自己定义的方法,如下:

  private void smoothScrollBy(int dx, int dy) {        //参数解释:1、x轴起始位置;2、y轴起始位置;3、x轴的偏移量;4、y轴的偏移量;5、完成这个滑动需要的时间        scroller.startScroll(getScrollX(), 0, dx, 0, 500);        invalidate();    }

这里的smoothScrollBy方法就是当我们需要滑动时,要调的方法。其中dx、dy都是末位置减去起始位置的坐标 。然而仅仅是scroller.startScroll()方法是无法让View滑动的,invalidate()方法才会导致View重绘,此时会调用View的draw方法,然而在draw方法中又会掉用一个方法,如下:(此方法需要我们自己去实现,也在我们自定义的ViewGroup中实现)

 @Override    public void computeScroll() {    //computeScrollOffset()返回true,代表滑动还未结束;false 则已结束。        if (scroller.computeScrollOffset()) {            scrollTo(scroller.getCurrX(), scroller.getCurrY());            postInvalidate();        }    }## 标题 ##

代码解析:当View重绘后会在draw方法中调用computeScroll方法,而computeScroll方法又会向scroller获取当前的scrollX和scrollY,然后通过scrollTo方法实现滑动;接着又掉用postInvalidate方法进行第二次重绘,然后就跟第一次重绘一样的流程了,如此反复,直到整个滑动过程结束。

后两种方法就不解释了,可以自己去探索。属性动画会在后面的文章中介绍。

0 0