什么是Scroller?

翻译为弹性滑动对象,可以实现View的弹性滑动动画,与Scroller相关的就是大家比较熟悉的scrollTo和scrollBy方法,可以用来实现View的滑动,但是它们的缺点就是瞬间完成,无法很平滑地过渡,而Scroller可以帮助我们很平滑地进行弹性滑动。

使用

一般使用在自定义View中较多,可以实现View的弹性滑动效果
1、自定义一个View,注释很详细

/*** 自定义View 里面有个Scroller 它能实现非常平滑的滚动效果 就像动画一样 可以控制在多长时间内滚动到指定位置* * @author yangfan* */
public class DIYView extends LinearLayout
{// 创建一个Scrollerprivate Scroller mScroller;public DIYView(Context context){this(context, null);}// 1、创建Scrollerpublic DIYView(Context context, AttributeSet attrs){super(context, attrs);mScroller = new Scroller(context);}// 2、触摸回调,每次X轴方向加100,然后调用smoothScrollTo@Overridepublic boolean onTouchEvent(MotionEvent event){int disX = mScroller.getFinalX() + 100;Log.e("***************", "onTouchEvent");smoothScrollTo(disX, 0);return super.onTouchEvent(event);}// 3、根据坐标差 调用smoothScrollBypublic void smoothScrollTo(int fx, int fy){int dx = fx - mScroller.getFinalX();int dy = fy - mScroller.getFinalY();smoothScrollBy(dx, dy);}// 4、调用startScroll设置坐标,然后invalidate重绘public void smoothScrollBy(int dx, int dy){// 参数一:startX 参数二:startY为开始滚动的位置,dx,dy为滚动的偏移量, 1500ms为完成滚动的时间mScroller.startScroll(mScroller.getFinalX(), mScroller.getFinalY(), dx,dy, 3000);invalidate();}// 5、重绘过程会调用computeScroll 真正调用scrollTo进行滚动 然后再进行重绘@Overridepublic void computeScroll(){// 判断滚动是否完成 true就是未完成if (mScroller.computeScrollOffset()){scrollTo(mScroller.getCurrX(), mScroller.getCurrY());// 本案例中 调用postInvalidate和invalidate都可以invalidate();}super.computeScroll();}}
复制代码

2、布局中使用自定义View

<com.abc.edu.scroll.DIYView xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#ffffff" ><!-- 弄一个提示文本 --><TextViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#ff0000"android:gravity="center"android:text="请向左滑动"android:textSize="30sp" /></com.abc.edu.scroll.DIYView>
复制代码

3、测试运行,然后用手指在屏幕滑动几下

注意点

Scroller本身并不能实现View的滑动,本质还是让View重绘,重绘中调用View的computeScroll方法,在该方法中进行滑动方法的具体实现,然后再调用重绘函数,如此反复才会在界面上形成不断滑动的动画。

转载于:https://juejin.im/post/5a311380f265da431e16c2f2

Android开发之Scroller相关推荐

  1. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序   在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, ...

  2. Android开发之TextView高级应用

    Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...

  3. android之json解析优化,Android开发之json解析

    目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...

  4. android注册弹窗,Android开发之PopupWindow创建弹窗、对话框的方法详解

    本文实例讲述了Android开发之PopupWindow创建弹窗.对话框的方法.分享给大家供大家参考,具体如下: 简介: PopupWindow 可创建类似对话框风格的窗口 效果: 使用方法: 使用P ...

  5. Android开发之旅:组件生命周期(二)

    引言 应用程序组件有一个生命周期--一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  6. Android开发之SpannableString具体解释

    在实际的应用开发过程中常常会遇到.在文本的不同部分显示一些不同的字体风格的信息如:文本的字体.大小.颜色.样式.以及超级链接等. 普通情况下,TextView中的文本都是一个样式.对于类似的情况.能够 ...

  7. Android开发之2048安卓版

    之前是在eclipse上写的,后面换成了android sudio. 2048游戏的UI整体可以采用线性布局,即LinearLayout,其中嵌套一个线性布局和一个GridLayout,内嵌的线性布局 ...

  8. android语音播放工具类,Android开发之MediaPlayer多媒体(音频,视频)播放工具类

    本文实例讲述了Android开发之MediaPlayer多媒体(音频,视频)播放工具类.分享给大家供大家参考,具体如下: package com.android.imooc.chat; import ...

  9. Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)

    鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio  Android Studio 是一个Android开发环境,基于Intel ...

最新文章

  1. “中药资源创新院士团队”诚聘结构、合成和计算生物学博士后5-10名
  2. iOS之深入了解控制器View的加载
  3. [转]重新签名Android pre-install APK
  4. 关于Android studio找不到sqlite数据库的解决方法
  5. 《A.I.爱》王力宏与人工智能谈恋爱 邀李开复来客串
  6. sqlserver 中怎样查看一个数据库中表的关系
  7. c++ 读取写入txt
  8. 计算机是如何计算 log 函数的?
  9. 【金融市场基础知识】——金融市场体系
  10. 计算机无法加载这个项目,Windows系统中出现无法加载这个硬件的设备驱动程序(代码39)的解决方法介绍...
  11. 计算机点阵存储空间,计算机存储量计算存储400个24*24点阵汉字字形所需的存储容量是________....
  12. 365天英语口语大全
  13. QuickTime格式解析
  14. matlab可见光通信,可见光通信研究工作matlab代码
  15. BiLSTM文本分类实践
  16. 标识符 关键字 字面值 数据类型 进制换算 字符编码 变量 数据类型详解 运算符
  17. 如何解决业务系统中的热点问题
  18. iPad/iPhone与电脑共享文件
  19. 攻防世界xff和refereer
  20. 数据北京研发中心CTO王东:如何打造有战斗力的团队

热门文章

  1. 手机驱动开发_新加坡科学家开发由智能手机驱动的无电池“智能服装”
  2. 第一章--电商设计表电商项目--数据库设计
  3. 工程师软技能4:找出你的短板
  4. oracle case套case,,套用when case
  5. mkisofs(genisoimage) 命令说明
  6. IAR for AVR delay函数
  7. Go 官方未来会不会支持循环引用?
  8. jsp因为端口无效不能启动_Java:JSP和Servlet面试题总结
  9. Kafka相关面试真题整理( 持续更新... ... )
  10. redis单机安装并配置服务脚本启动