Android中scrollTo _ scrollBy _ Scroller 的使用

作者:阿钟程序猿

博客:http://blog.csdn.net/a_zhon

声明:本文由作者授权发布,未经原作者允许请勿转载

Android Scroller完全解析,关于Scroller你所需知道的一切:

http://blog.csdn.net/guolin_blog/article/details/48719871

本文基于郭神给出的教程(原文地址如上),在结合自己的编码总结这个几个东西的使用。


先来说 scrollTo()与scrollBy()的使用与区别:

这两个函数都是在View.java中,所以这两个都可以对View视图进行滚动。阅读这两个函数的源码就可以找出它们的区别了。

Android中scrollTo _ scrollBy _ Scroller 的使用_第1张图片
  • 可以发现scrollBy()最终调用的还是scrollTo(),只是对参数进行了改变;mScrollX、mScrollY代表的就是View x、y轴当前滑动的距离。

  • 通过分析我们可以看出一点:

    • scrollTo() 是将View滚动到指定的一个位置A(x,y)

    • scrollBy() 是将View从上次滚动的位置 继续滚动一定的距离

  • 这两个函数一般都是作用于ViewGroup的,滚动其内部子View;如果作用于View上的话 效果会很糟糕的(不信你试试)


区别说完了,那就动手来写代码实践吧!

  • 效果图

Android中scrollTo _ scrollBy _ Scroller 的使用_第2张图片

使用一个LinearLayout内部放置两个Button即可,用来分别调用scrollBy()和scrollTo()函数。


  • scrollTo

Android中scrollTo _ scrollBy _ Scroller 的使用_第3张图片


  • scrollBy

Android中scrollTo _ scrollBy _ Scroller 的使用_第4张图片


接下来说Scroller这个类的使用,封装了滚动的操作

在布局中放置一个自定义的ViewGroup,并添加一个子View。看下我们最终实现的效果,让View竖直向下滚动:

Android中scrollTo _ scrollBy _ Scroller 的使用_第5张图片


Android中scrollTo _ scrollBy _ Scroller 的使用_第6张图片


  • 自定义的ViewGroup MyViewGroup

Android中scrollTo _ scrollBy _ Scroller 的使用_第7张图片


  • 通过点击TextView触发滚动逻辑MyViewGroup中的startScroll()

Android中scrollTo _ scrollBy _ Scroller 的使用_第8张图片
  • 第一步:在ViewGroup的构造函数中初始化Scroller scroller = new Scroller(context);

  • 第二步:调用scroller.startScroll(0, getScrollY(), 0, -200); 设置View需要滚动到的位置,参数意思已经在上面代码中给出。这个函数只是对View滚动的一些参数设置,并没有开始滚动。

  • 第三步:调用View 的invalidate();对界面进行刷新,从而调用onDraw()函数而onDraw()函数中又调用了computeScroll()函数。

  • 第四步:重写computeScroll()函数对View进行滚动,一般情况下代码也就是上面这样固定的写法。scroller.getCurrX()、scroller.getCurrY()获取当前滚动的偏移量,


基础说完了,就可以自己动手写个案例练练手熟悉熟悉。

自定义ViewGroup 仿系统的ViewPage效果自定义实现的效果:

Android中scrollTo _ scrollBy _ Scroller 的使用_第9张图片


  • 布局代码:摆放三个View

Android中scrollTo _ scrollBy _ Scroller 的使用_第10张图片 Android中scrollTo _ scrollBy _ Scroller 的使用_第11张图片


  • 自定义Group的逻辑:宽度充满屏幕、里面的子View充满Group并水平排列View

  • 先处理自定Group逻辑,摆放子view 逻辑都写在注释里了

Android中scrollTo _ scrollBy _ Scroller 的使用_第12张图片 Android中scrollTo _ scrollBy _ Scroller 的使用_第13张图片 Android中scrollTo _ scrollBy _ Scroller 的使用_第14张图片


接下来就是来处理我们的滑动逻辑,当往左滑动时候:下一页出现了1/3的宽度 那么就可以让它自动滚动到下一页,同理 当往右滑动的时候前一页出现了1/3 那么也让它自动滚动到前一页;当是第一页 或者 最后一页的时候就不允许滑动了。

Android中scrollTo _ scrollBy _ Scroller 的使用_第15张图片
  • 复写onTouchEvent 处理触摸事件

Android中scrollTo _ scrollBy _ Scroller 的使用_第16张图片 Android中scrollTo _ scrollBy _ Scroller 的使用_第17张图片 Android中scrollTo _ scrollBy _ Scroller 的使用_第18张图片


基本需要说的内容,都在代码的注释里了所以需要你仔细认真阅读代码 。关于getRawX()的解释可以看这里

自定义LinearLayout实现RatingBar效果,打造一个评分控件:

http://blog.csdn.net/a_zhon/article/details/70214584


需要源码的童鞋,请先留言



Android中scrollTo _ scrollBy _ Scroller 的使用_第19张图片

一命二运三风水,四修阴德五读书!

Android中scrollTo _ scrollBy _ Scroller 的使用_第20张图片

刘桂林

微信号 : Android_LiuGuiLin

新浪微博:@刘某人程序员




你可能感兴趣的:(Android中scrollTo _ scrollBy _ Scroller 的使用)