`
ipjmc
  • 浏览: 702590 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android Scroller简单用法

阅读更多

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

      相关API介绍如下

mScroller.getCurrX() //获取mScroller当前水平滚动的位置
mScroller.getCurrY() //获取mScroller当前竖直滚动的位置
mScroller.getFinalX() //获取mScroller最终停止的水平位置
mScroller.getFinalY() //获取mScroller最终停止的竖直位置
mScroller.setFinalX(int newX) //设置mScroller最终停留的水平位置,没有动画效果,直接跳到目标位置
mScroller.setFinalY(int newY) //设置mScroller最终停留的竖直位置,没有动画效果,直接跳到目标位置

//滚动,startX, startY为开始滚动的位置,dx,dy为滚动的偏移量, duration为完成滚动的时间
mScroller.startScroll(int startX, int startY, int dx, int dy) //使用默认完成时间250ms
mScroller.startScroll(int startX, int startY, int dx, int dy, int duration)

mScroller.computeScrollOffset() //返回值为boolean,true说明滚动尚未完成,false说明滚动已经完成。这是一个很重要的方法,通常放在View.computeScroll()中,用来判断是否滚动是否结束。



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

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Scroller;

public class CustomView extends LinearLayout {

	private static final String TAG = "Scroller";

	private Scroller mScroller;

	public CustomView(Context context, AttributeSet attrs) {
		super(context, attrs);
		mScroller = new Scroller(context);
	}

	//调用此方法滚动到目标位置
	public void smoothScrollTo(int fx, int fy) {
		int dx = fx - mScroller.getFinalX();
		int dy = fy - mScroller.getFinalY();
		smoothScrollBy(dx, dy);
	}

	//调用此方法设置滚动的相对偏移
	public void smoothScrollBy(int dx, int dy) {

		//设置mScroller的滚动偏移量
		mScroller.startScroll(mScroller.getFinalX(), mScroller.getFinalY(), dx, dy);
		invalidate();//这里必须调用invalidate()才能保证computeScroll()会被调用,否则不一定会刷新界面,看不到滚动效果
	}
	
	@Override
	public void computeScroll() {
	
		//先判断mScroller滚动是否完成
		if (mScroller.computeScrollOffset()) {
		
			//这里调用View的scrollTo()完成实际的滚动
			scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
			
			//必须调用该方法,否则不一定能看到滚动效果
			postInvalidate();
		}
		super.computeScroll();
	}
}
19
0
分享到:
评论
20 楼 葫芦瓢 2017-05-26  
葫芦瓢 写道
专注IT 写道
请问楼主demo中为什么是CustomView中的子view在滚动,而不是CustomView滚动呢,不解

因为scrollTo只能改变view内容的位置,而不能改变view本身的内容。

因为scrollTo只能改变view内容的位置,而不能改变view本身的位置,刚刚写错了
19 楼 葫芦瓢 2017-05-26  
专注IT 写道
请问楼主demo中为什么是CustomView中的子view在滚动,而不是CustomView滚动呢,不解

因为scrollTo只能改变view内容的位置,而不能改变view本身的内容。
18 楼 u011493452 2016-06-30  
注册账号给楼主点赞! 
17 楼 专注IT 2015-09-05  
请问楼主demo中为什么是CustomView中的子view在滚动,而不是CustomView滚动呢,不解
16 楼 红柚子 2015-09-02  
demo不好用呢!!!
15 楼 红柚子 2015-09-02  
14 楼 junhao495 2015-09-01  
博主,我真想亲你一口啊,我在做AndroidTV,横向滑动一卡一卡的,这个问题弄了我快一个星期了,用了你这个瞬间变好了!!!!多谢啊!!!!哈哈!
13 楼 wan261 2015-06-12  
weifengxiatian 写道
44 postInvalidate();  也可以用Invalidate()吧。都在UI线程里。

我也想问这个问题,楼主可以回答下嘛?
12 楼 czxpfdbxh 2014-10-31  
实用简单。很能说明sroller的的用法,能说明问题就好,喜欢楼主的风格
11 楼 weifengxiatian 2014-06-12  
44 postInvalidate();  也可以用Invalidate()吧。都在UI线程里。
10 楼 chipstar 2014-05-16  
这个例子非常好,实用简单。很能说明sroller的的用法,感谢博主。
9 楼 panwen79 2014-02-12  
强,正在找这方面的东西
8 楼 dollgo 2013-12-26  
解析清楚,例子简单,能说明实际问题!!!!!  
7 楼 u011404046 2013-12-02  
下载的列子怎么没用??
6 楼 122601478 2013-08-20  
下载不了。
5 楼 kkmike999 2013-04-16  
解析清楚,例子简单,能说明实际问题!!!!! 
4 楼 zhuruyi 2012-11-20  
例子效果不错
3 楼 yodang1 2012-09-20  
例子很不错,很详细,谢谢了
2 楼 ipjmc 2012-09-16  
huangbo_2020 写道
不知道如何用····请博主随便写过简单Demo吧·感谢···`

已更新
1 楼 huangbo_2020 2012-08-10  
不知道如何用····请博主随便写过简单Demo吧·感谢···`

相关推荐

    深入理解Android中Scroller的滚动原理

    什么是实现View的平滑滚动效果呢,举个简单的例子,一个View从在我们指定的时间内从一个位置滚动到另外一个位置,我们利用Scroller类可以实现匀速滚动,可以先加速后减速,可以先减速后加速等等效果,而不是瞬间的...

    Android使用Scroller实现弹性滑动效果

    本文实例为大家分享了Android使用Scroller实现弹性滑动展示的具体代码,供大家参考,具体内容如下 scrollTo、scrollBy View内部为了实现滑动提供了这两个方法,但是使用这两个方法滑动的效果是瞬间的不够平滑,如何...

    scroller类实战案例类似ViewPager滑动功能

    scroller类用法解析和scroller类实战案例类似ViewPager滑动功能

    scrollerDemo

    自己写的关于scroller的一个小demo,感兴趣的朋友可以下载下来看看,也可以查看我的文章产看更多的解析过程: http://blog.csdn.net/Anny_Lin/article/details/50346353

    Android Scroller大揭秘

    在学习使用Scroller之前,需要明白scrollTo()、scrollBy()方法。 一、View的scrollTo()、scrollBy() scrollTo、scrollBy方法是View中的,因此任何的View都可以通过这两种方法进行移动。首先要明白的是,scrollTo、...

    用Scroller完成一个简单的ViewPager

    Scroller的使用主要为3步: 1、初始化Scroller 2、重写computeScroll()方法 computeScroll()是在View的draw的时候调用的,而invalidate会导致View重绘,所以在重写computeScroll()之后,我们要使用invalidate...

    Android自定义View弹性滑动Scroller详解

    本文实例为大家分享了Android弹性滑动类Scroller的具体代码,供大家参考,具体内容如下 Scroller是什么 Scroller就是一个滑动帮助类。它并不可以使View真正的滑动,而是配合scrollTo/ScrollBy让view产生缓慢的滑动...

    MaterialDesignQuickScroller:带有 Material Design 的 Android Quick Scroller。 还支持弹出和全息风格

    Android 5.0 Lolipop 使用材料设计,旧的 QuickScroll 库不支持此功能。 这个新库还重构了 QuickScroll 代码,因此您可以通过 xml 属性轻松更改 Scroller 的样式,并在 java 代码中添加新的滚动条样式。 该库还...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    3.3.1 使用Scroller 136 3.3.2 通过动画 138 3.3.3 使用延时策略 139 3.4 View的事件分发机制 140 3.4.1 点击事件的传递规则 140 3.4.2 事件分发的源码解析 144 3.5 View的滑动冲突 154 3.5.1 常见的滑动...

    Android开发艺术探索

    3.3.1 使用Scroller / 136 3.3.2 通过动画 / 138 3.3.3 使用延时策略 / 139 3.4 View的事件分发机制 / 140 3.4.1 点击事件的传递规则 / 140 3.4.2 事件分发的源码解析 / 144 3.5 View的滑动冲突 / 154 ...

    自定义Android可滑动控件源码

    实现了一个可滑动显示图片的控件,用于了解Android的触控机制,Scroller和VelocityTracker的用法

    Android 利用ViewPager实现类微信的左右滑动效果

    Android利用ViewPager实现类微信的左右滑动效果,详细代码注解解析setOnPageChangeListener各参数意义以及使用方法

    android开发艺术探索高清完整版PDF

    / 441 12.3.1 照片墙效果 / 441 12.3.2 优化列表的卡顿现象 / 446 第13章 综合技术 / 448 13.1 使用Crash Handler来获取应用的crash信息 / 449 13.2 使用multidex来解决方法数越界 / 455 13.3 Android的动态...

    android群雄传

    2.2 Android Studio高级使用技巧 19 2.2.1 更新SDK 20 2.2.2 Android Studio常用界面 21 2.2.3 导入Android Studio工程 23 2.3 ADB命令使用技巧 24 2.3.1 ADB基础 24 2.3.2 ADB常用命令 25 2.3.3 ADB命令来源...

    详解Android中实现ListView左右滑动删除条目的方法

    这里来给大家带来使用Scroller的小例子,同时也能用来帮助初步解除的读者更加熟悉的掌握Scroller的使用,掌握好了Scroller的使用我们就能实现很多滑动的效果。例如侧滑菜单,launcher,ListView的下拉刷新等等效果,...

    自定义类型ViewPager组件及同步滚动条

    继承自ViewGroup然后配合Scroller完成滑动效果 主要弄清楚scrollTo和scrollBy 及scroller的用法即可很容易实现

    《Android自定义组件开发详解》

    第三章 使用Graphics2D实现动态效果 64 3.1 概述 64 3.2 invalidate()方法 65 3.3 坐标转换 69 3.4 剪切区(Clip) 73 3.5 案例:指针走动的手表 82 3.6 练习作业 88 第四章 双缓存技术 89 4.1 双缓存 89 4.2 在...

    Android 自定义布局竖向的ViewPager的实现

    弹性滚动Scroller的用法 速度轨迹追踪器VelocityTracker的用法 如何处理滑动事件冲突 dispatchTouchEvent:(外部拦截)告诉此ScrollLayout的父布局,什么时候该拦截触摸事件,什么时候不该拦截触摸事件 ...

Global site tag (gtag.js) - Google Analytics