android.widget.Scroller

  一、概述

    这个类封装了滚动操作。使用这个类可以获得用于创建滚动动画的数据——例如:用于回应滑动手势。
Scroller随时跟踪滚动的偏移量(相对原点),但不能自动应用这些位置信息于我们的view。

    通常使用computeScrollerOffset()方法监测滚动的横竖向偏离量,这个方法返回一个boolean值用于判断滚动动画是否完成(true表示动画还没有完成),可利用这个方法获得当前位置的偏移量,例如

1 private Scroller mScroller = new Scroller(context);
2 
3 
4 if (mScroller.computeScrollOffset()) {
5      //获得当前的横向和竖向位置(相对原点(0,0) ) 
6 int currX = mScroller.getCurrX(); 7 int currY = mScroller.getCurrY(); 8 ... 9 }

 

  二、构造函数:
    public Scroller(Context context)

    以缺省的持续时间(250ms)和动画插入器创建一个Scroller

 

    public Scroller(Context context , Interpolator interpolator)

    以特定的动画插入器创建一个Scroller,若对应参数interpolator为空,则使用缺省值


 

  三、公共方法

    1.  public void abortAnimation()

    中止动画。与forceFinished(boolean)相反,滚动到终点坐标时停止动画。

    

    2.  public boolean computeScrollerOffset()

    计算滚动偏离量。当想要得到新的坐标信息时调用此方法,这与android.view.VelocityTracker中的 computeCurrentVelocity()的思想相似——先调用一个方法让程序进行计算,再使用其他方法获取计算结果。不同的是,Scroller需要判断是否有滚动动作在进行中,返回值为true表示滚动未完成(可获取当前的方向偏移量),否则就不可以了,编写相关相关操作时该有这样的判断,例如上面的代码。

 

    3.  public void extendDuration(int extend)

    延长动画的持续时间。当和setFinalX(int)和setFinalY(int)一起使用时,可以使动作持续更长时间并且滑动距离更长。参数extend为延长的时间数,以毫秒为单位。

  

    4.  public void fling(int startX, int startY, int velocityX, int velocity,

              int minx, int maxX, int minY, int maxY)

    在fling(译者注:快滑,用户按下触摸屏、快速移动后松开)手势基础上开始滚动。滚动的距离取决于fling  
    的初速度。参数:

    startX 滚动起始点X坐标

 

    startY 滚动起始点Y坐标

 

    velocityX   当滑动屏幕时X方向初速度,以每秒像素数计算

 

    velocityY   当滑动屏幕时Y方向初速度,以每秒像素数计算

 

    minX    X方向的最小值,scroller不会滚过此点

 

    maxX    X方向的最大值,scroller不会滚过此点

 

    minY    Y方向的最小值,scroller不会滚过此点

 

    maxY    Y方向的最大值,scroller不会滚过此点

 

    5.  public final void forceFinished(boolean finished)

      强制动画完成后finished的值,原本finished为false时动画结束。(尚待验证)

 

    6.   public float getCurrVelocity()

      获得当前速率

 

    7.   public final int getCurrX()和public final int getCurrY()

      分别获得当前滚动的横向和竖向坐标(距离原点的绝对值)

    

    8.  public final int getStartX()和public final int getStartY()

      分别获得滚动起始点的横向和竖向坐标(距离原点的绝对值)

    

    9.  public final int getFinalX()和public final int getFinalY()

      分别获得滚动结束点的横向和竖向坐标(距离原点的绝对值)

    

    10.  public void setFinalX(int newX)和public void setFinalY(int newY)

      分别设置滚动终点的横向和竖向坐标

    

    11.   public final int getDuration()

      获取滚动事件持续的时间,以毫秒为单位

    

    12.  public final boolean isFinished()

      返回滚动是否已经结束

    

    13. public final void setFriction(float friction)

      滑动的摩擦(关于这个方法的解释比较少)

    

    14. public void startScroll(int startX, int startY, int dx, int dy)

      以特定的起始点和距离开始滚动,省的持续时间为250毫秒。参数:

      startX 水平方向滚动的偏移值,以像素为单位。正值表明滚动将向左滚动

      startY 垂直方向滚动的偏移值,以像素为单位。正值表明滚动将向上滚动

      dx 水平方向滑动的距离,正值会使滚动向左滚动

      dy 垂直方向滑动的距离,正值会使滚动向上滚动

    

    15.  public void startScroll(int startX, int startY, int dx, int dy, int duration)

      以特定的起始点、距离和持续时间开始滚动。其他与上一个方法相同。

    

    16.  public int timePassed()

      获得从滚动开始后经过的时间。


 

  四、补充

    Scroller配合其他动作事件可以做出很棒的效果,笔者最开始接触是在ViewGroup的onTouchEvent里面。本文只对Scroller的基础内容做一个整理,以备查阅使用,后面会再整理一些实实在在的例子。

 

声明:文章通过网络学习和查询API官方文档总结而来,若有理解出错或者翻译不到位地方,万望留言交流。

 

posted on 2014-08-28 00:11  NickLearnIT  阅读(216)  评论(0编辑  收藏  举报