Android里Scroller类是为了实现View平滑滚动的一个Helper类。通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(context)。设置mScroller滚动的位置时,并不会导致View的滚动,通常是用mScroller记录/计算View滚动的位置,再重写View的computeScroll(),完成实际的滚动。

相关API介绍如下

Java代码  
  1. mScroller.getCurrX() //获取mScroller当前水平滚动的位置
  2. mScroller.getCurrY() //获取mScroller当前竖直滚动的位置
  3. mScroller.getFinalX() //获取mScroller最终停止的水平位置
  4. mScroller.getFinalY() //获取mScroller最终停止的竖直位置
  5. mScroller.setFinalX(int newX) //设置mScroller最终停留的水平位置,没有动画效果,直接跳到目标位置
  6. mScroller.setFinalY(int newY) //设置mScroller最终停留的竖直位置,没有动画效果,直接跳到目标位置
  7. //滚动,startX, startY为开始滚动的位置,dx,dy为滚动的偏移量, duration为完成滚动的时间
  8. mScroller.startScroll(int startX, int startY, int dx, int dy) //使用默认完成时间250ms
  9. mScroller.startScroll(int startX, int startY, int dx, int dy, int duration)
  10. mScroller.computeScrollOffset() //返回值为boolean,true说明滚动尚未完成,false说明滚动已经完成。这是一个很重要的方法,通常放在View.computeScroll()中,用来判断是否滚动是否结束。

举例说明,自定义一个CustomView,使用Scroller实现滚动:

Java代码  
  1. import android.content.Context;
  2. import android.util.AttributeSet;
  3. import android.util.Log;
  4. import android.view.View;
  5. import android.widget.LinearLayout;
  6. import android.widget.Scroller;
  7. public class CustomView extends LinearLayout {
  8. private static final String TAG = "Scroller";
  9. private Scroller mScroller;
  10. public CustomView(Context context, AttributeSet attrs) {
  11. super(context, attrs);
  12. mScroller = new Scroller(context);
  13. }
  14. //调用此方法滚动到目标位置
  15. public void smoothScrollTo(int fx, int fy) {
  16. int dx = fx - mScroller.getFinalX();
  17. int dy = fy - mScroller.getFinalY();
  18. smoothScrollBy(dx, dy);
  19. }
  20. //调用此方法设置滚动的相对偏移
  21. public void smoothScrollBy(int dx, int dy) {
  22. //设置mScroller的滚动偏移量
  23. mScroller.startScroll(mScroller.getFinalX(), mScroller.getFinalY(), dx, dy);
  24. invalidate();//这里必须调用invalidate()才能保证computeScroll()会被调用,否则不一定会刷新界面,看不到滚动效果
  25. }
  26. @Override
  27. public void computeScroll() {
  28. //先判断mScroller滚动是否完成
  29. if (mScroller.computeScrollOffset()) {
  30. //这里调用View的scrollTo()完成实际的滚动
  31. scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
  32. //必须调用该方法,否则不一定能看到滚动效果
  33. postInvalidate();
  34. }
  35. super.computeScroll();
  36. }
  37. }

  • ScrollerDemo.rar (322.3 KB)

Android Scroller简单用法相关推荐

  1. Android AsyncTask简单用法

    三个泛型参数: Param 任务执行器需要的数据类型 Progress 后台计算中使用的进度单位数据类型 Result 后台计算返回结果的数据类型有些参数是可以设置为不使用的,只要传递为Void型即可 ...

  2. Android TabLayout(选项卡布局)简单用法实例分析

    本文实例讲述了Android TabLayout(选项卡布局)简单用法.分享给大家供大家参考,具体如下: 我们在应用viewpager的时候,经常会使用TabPageIndicator来与其配合.达到 ...

  3. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 最简单用法 | 一行代码搞定权限申请 | 推荐用法 )

    文章目录 一.添加依赖 二.在 AndroidManifest.xml 中配置权限 三.权限申请最简单用法 四.推荐使用的用法 五.GitHub 地址 上一篇博客 [Android 应用开发]Goog ...

  4. 【Android】Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法

    Android适配器之ArrayAdapter.SimpleAdapter和BaseAdapter的简单用法与有用代码片段 ArrayAdapter.SimpleAdapter和BaseAdapter ...

  5. Android—— ListView 的简单用法及定制ListView界面

    一.ListView的简单用法 2. 训练目标 1) 掌握 ListView 控件的使用 2) 掌握 Adapter 桥梁的作用 实现步骤: 1)首先新建一个项目, 并让ADT 自动帮我们创建好活动. ...

  6. android中checkbox使用方法,Android开发中CheckBox的简单用法示例

    本文实例讲述了Android开发中CheckBox的简单用法.分享给大家供大家参考,具体如下: CheckBox是一种在界面开发中比较常见的控件,Android中UI开发也有CheckBox,简单的说 ...

  7. android surface编程,Android中SurfaceView用法简单实例

    本文实例讲述了Android中SurfaceView用法.分享给大家供大家参考,具体如下: 这里贴上一个小程序代码,主要运用SurfaceView来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来 ...

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

    2016大家新年好!这是今年的第一篇文章,那么应CSDN工作人员的建议,为了能给大家带来更好的阅读体验,我也是将博客换成了宽屏版.另外,作为一个对新鲜事物从来后知后觉的人,我终于也在新的一年里改用Ma ...

  9. Android Scroller的使用及自我理解

    2019独角兽企业重金招聘Python工程师标准>>> 以前做一个看书的项目时,有个翻书的功能,当手指滑动书页移动一段然后抬起后,需要页面view自动完成剩余的操作: 1.当滑动距离 ...

最新文章

  1. Service 层和 Dao 层有必要为每个类都加上接口吗?
  2. CSS3 flexbox 布局 ---- flex项目属性介绍
  3. 2022年美国大学生数学建模竞赛各题型常见参考代码汇总
  4. ASCII和字母的转换
  5. 【载誉】致远互联荣获“2017最佳协同管理解决方案”殊荣
  6. Linux中断(interrupt)子系统之四:驱动程序接口层 中断通用逻辑层
  7. 软件架构(10)---java资深架构师分布式技术分享
  8. 印度打车软件Ola将登陆伦敦,或将取代被吊销伦敦执照的Uber
  9. sqlite mysql excel_SQlite数据库信息怎么转成excel文件?
  10. JAVA中构造方法说法_关于Java程序的构造方法,说法错误的是( )
  11. 学习-【前端】-angularjs基本框架以及向服务器发送请求的方法
  12. canvas绘画时钟
  13. ELK-日志收集工具nxlog
  14. SQL Server2012企业版与标准版比较
  15. AP计算机编程路上的照明灯----学校老师哈佛博士的伊利诺伊大学学生如何说
  16. Clusterrolebindings 创建错误
  17. android 调用系统播放器播放视频,适配android 7.0以上
  18. 百度网盘国际版 Dubox 体验:干净好用,却与国内用户无缘
  19. 不用中间变量交换两个数的值
  20. 输入三个数判断能否构成直角三角形 C语言

热门文章

  1. Android 定制RadioButton样式
  2. MySQL Proxy实现数据库读写分离
  3. 虚拟机无法上网/连接失败原因及解决方法
  4. ES6中的class是如何实现的?(附Babel编译的ES5代码详解)
  5. FE.ES-异步编程进化史
  6. 腾讯斥资3.17亿美元增持B站 持股增至12%
  7. 什么是拜占庭将军问题
  8. 在SQL Server中将数据导出为XML和Json
  9. 修改机器名、IP对arcgis server、portal的影响?
  10. 返回一个一维整数数组中最大子数组的和02