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视图进行滚动。阅读这两个函数的源码就可以找出它们的区别了。

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

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

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

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

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


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

  • 效果图

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


  • scrollTo


  • scrollBy


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

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



  • 自定义的ViewGroup MyViewGroup


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

  • 第一步:在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效果自定义实现的效果:


  • 布局代码:摆放三个View


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

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


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

  • 复写onTouchEvent 处理触摸事件


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

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

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


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



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

刘桂林

微信号 : Android_LiuGuiLin

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值