time 
设为首页】【收藏本站
当前位置: 主页 > 电脑网络 > 操作系统 > 嵌入式 > Android > Android Scroller类的滚动实现原理详解

Android Scroller类的滚动实现原理详解

时间:2014-01-26 10:52 点击:5654次 字体:[ ]




今天给大家讲解的是Scroller类的滚动实现原理,可能很多朋友不太了解该类是用来干嘛的,但是研究Launcher的朋友应该对他很熟悉,Scroller类是滚动的一个封装类,可以实现View的平滑滚动效果,什么是实现View的平滑滚动效果呢,举个简单的例子,一个View从在我们指定的时间内从一个位置滚动到另外一个位置,我们利用Scroller类可以实现匀速滚动,可以先加速后减速,可以先减速后加速等等效果,而不是瞬间的移动的效果,所以Scroller可以帮我们实现很多滑动的效果。
在介绍Scroller类之前,我们先去了解View的scrollBy() 和scrollTo()方法的区别,在区分这两个方法的之前,我们要先理解View 里面的两个成员变量mScrollX, mScrollY,X轴方向的偏移量和Y轴方向的偏移量,这个是一个相对距离,相对的不是屏幕的原点,而是View的左边缘,举个通俗易懂的例子,一列火车从吉安到深圳,途中经过赣州,那么原点就是赣州,偏移量就是 负的吉安到赣州的距离,大家从getScrollX()方法中的注释中就能看出答案来

  1. /** 
  2.     * Return the scrolled left position of this view. This is the left edge of 
  3.     * the displayed part of your view. You do not need to draw any pixels 
  4.     * farther left, since those are outside of the frame of your view on 
  5.     * screen. 
  6.     * 
  7.     * @return The left edge of the displayed part of your view, in pixels. 
  8.     */ 
  9.    public final int getScrollX() { 
  10.        return mScrollX; 
  11.    } 

现在我们知道了向右滑动 mScrollX就为负数,向左滑动mScrollX为正数,接下来我们先来看看 scrollTo()方法的源码

  1. /** 
  2.    * Set the scrolled position of your view. This will cause a call to 
  3.    * {@link #onScrollChanged(int, int, int, int)} and the view will be 
  4.    * invalidated. 
  5.    * @param x the x position to scroll to 
  6.    * @param y the y position to scroll to 
  7.    */ 
  8.   public void scrollTo(int x, int y) { 
  9.       if (mScrollX != x || mScrollY != y) { 
  10.           int oldX = mScrollX; 
  11.           int oldY = mScrollY; 
  12.           mScrollX = x; 
  13.           mScrollY = y; 
  14.           onScrollChanged(mScrollX, mScrollY, oldX, oldY); 
  15.           if (!awakenScrollBars()) { 
  16.               invalidate(); 
  17.           } 
  18.       } 
  19.   } 

从该方法中我们可以看出,先判断传进来的(x, y)值是否和View的X, Y偏移量相等,如果不相等,就调用onScrollChanged()方法来通知界面发生改变,然后重绘界面,所以这样子就实现了移动效果啦, 现在我们知道了scrollTo()方法是滚动到(x, y)这个偏移量的点,他是相对于View的开始位置来滚动的。在看看scrollBy()这个方法的代码

 

  1. /** 
  2.     * Move the scrolled position of your view. This will cause a call to 
  3.     * {@link #onScrollChanged(int, int, int, int)} and the view will be 
  4.     * invalidated. 
  5.     * @param x the amount of pixels to scroll by horizontally 
  6.     * @param y the amount of pixels to scroll by vertically 
  7.     */ 
  8.    public void scrollBy(int x, int y) { 
  9.        scrollTo(mScrollX + x, mScrollY + y); 
  10.    } 



本文地址 : http://www.fengfly.com/plus/view-214541-1.html
标签: Android
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: