什么是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. 计算机cmd入门,ODS(cmd)入门命令大全,果断收藏!!!
  2. 讲座预告 | 全年最值得看的英仙座流星雨要来 如何一晚看上百流星
  3. Voyage 联合创始人目击苹果无人车,推测其计算堆栈集成在传感器中
  4. Python学习心得——基础知识(六)
  5. Android Listview 性能优化
  6. python爬虫登录有验证码_大神教你用Python爬虫模拟登录带验证码网站
  7. ATcoder-Replace Digits【线段树】
  8. 全局变量和环境变量的区别
  9. c++中vecto容器r常使用的相关函数
  10. ubuntu 12安装oracle,Ubuntu12.04(32位)安装Oracle 11g(32位)全过程
  11. 牛客寒假算法基础训练营6
  12. Python 学习---------Day4
  13. 前端模拟数据(mock数据)的方法二:使用在线mock平台(fastmock)
  14. 《数字图像处理 第三版》(冈萨雷斯)——第十章 图像分割
  15. 常用编程语言的介绍及特点
  16. python实现isprime函数_Python实现isPrime函数
  17. 网站被攻击最全面的解决方法
  18. Maven Compile 编译报错
  19. 计算机拆机步骤图解,惠普笔记本拆机步骤图解
  20. 中兴力维动环监控_高新兴FSU中兴力维FSU艾默生FSU收购

热门文章

  1. c语言 -1%4,**************
  2. 每个人都应该学git,最新GitHub上git指南我不信你不会git
  3. 自适应网站设计对百度友好的关键:添加applicable-device标签(转)
  4. PHP的的指针的特性
  5. 使用RabbitMQ实现延迟任务
  6. SpringBoot+Redis缓存概念介绍
  7. OSSemPost()--发出一个信号量
  8. 读DS18B20序列号(c语言)
  9. php7当前目录,PHP获取路径或目录或当前文件名
  10. leetcode: 451. Sort Characters By Frequency