`

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使用小例子

    在Android开发中,`Scroller`是一个非常重要的工具类,主要用于实现平滑的滚动效果。它并不直接控制View的移动,而是提供一个离散的、可...理解并熟练掌握`Scroller`的使用,对于提升Android应用的用户体验至关重要。

    Android Scroller完全解析

    总结,`Scroller`是Android中实现平滑滚动效果的重要工具,通过合理的使用和定制,我们可以创造出丰富多样的滚动动画。理解其工作原理并结合`Interpolator`,可以提升用户界面的交互体验。在实际项目中,应根据需求...

    Android 使用Scroller自动滚动第二种实现

    通过分析该项目的代码,可以更深入地理解Scroller的工作原理和使用方法。 总之,Scroller是Android中实现平滑滚动动画的一个高效工具,它允许开发者自定义滚动速度和时间,从而创建出各种定制化的滚动效果。通过...

    Android之Scroller(滑动)完全解析

    在Android开发中,`Scroller`是一个非常重要的组件,它主要用于处理平滑的滚动效果,尤其是在没有...理解其工作原理和使用方法对于提升用户体验至关重要。通过实践和研究提供的代码示例,可以进一步巩固这一知识点。

    Android Scroller大揭秘

    Scroller的使用通常与`computeScroll()`方法结合,该方法在View的`onDraw()`回调中被调用。Scroller会根据设定的起始位置、目标位置和缓动因子计算出滚动动画的过程,然后在`computeScroll()`中检查是否还有剩余的...

    android scroller滑动效果简单demo

    在Android开发中,`Scroller`是一个非常重要的组件,它提供了平滑的滚动动画效果,广泛应用于各种滑动界面,如ScrollView、ViewPager等。本文将深入解析`Scroller`的工作原理,并通过一个简单的Demo来展示如何在实际...

    Android Scroller练习-仿ViewPager效果

    在Android开发中,`Scroller`是一个非常重要的组件,它主要用于处理滑动动画,而`ViewPager`则是一个常用的页面滑动容器,常用于实现类似Tab切换或者图片轮播的效果。本练习将结合`Scroller`和`ViewPager`,教你如何...

    android Scroller粗暴分析

    总的来说,`Scroller`是Android中实现平滑滚动效果的重要工具,理解其工作原理和使用方法对于提升用户体验至关重要。通过合理地利用`Scroller`,我们可以为用户创造出更加流畅、自然的交互体验。

    Android Scroller实现View弹性滑动Demo

    在Android开发中,`Scroller`是一个非常重要的工具类,它并不直接控制View的滚动,而是提供了一套平滑滚动的计算逻辑。`Scroller`主要用于处理View的弹性滑动效果,比如在ScrollView、ViewPager或者自定义View中实现...

    Android利用Scroller实现简单的物体漂浮移动效果

    在Android开发中,动画效果是提升用户体验的重要手段之一。`Scroller`类是Android系统提供的一种用于处理平滑滚动和动画的...在实际项目中,`Scroller`通常与`View`的滚动方法结合使用,创造出更加丰富的用户交互体验。

    详解Android Scroller与computeScroll的调用机制关系

    在Android开发中,`Scroller`和`computeScroll`是两个关键的概念,它们与ViewGroup的滚动动画密切相关。本文将详细解析这两个概念及其调用机制之间的关系。 首先,`Scroller`是一个内部类,它并不直接参与ViewGroup...

    android scrollTo,scrollBy与Scroller demo

    以下是一个简单的`Scroller`使用示例: ```java public class TestScrollView extends ScrollView { private Scroller scroller; public TestScrollView(Context context) { super(context); initScroller(); ...

    惯性滑动切换(Fling操作)源码

    这个示例可能包括一个自定义的ScrollView或者ViewPager子类,里面实现了`GestureDetector`的监听和`Scroller`的使用。通过分析和运行这个示例,你可以更深入地理解Fling操作的工作机制。 总的来说,惯性滑动切换...

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

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

    Scroller简单例子

    在`Scroller简单例子`中,我们将探讨如何使用Scroller的API来实现这样的效果。首先,我们需要理解Scroller的基本工作原理。Scroller并没有直接改变View的位置,而是通过计算出一系列的偏移量,然后将这些偏移量传递...

    [android]Scroller 的一些思考

    `Scroller`类并没有继承自Android的View或者 ViewGroup,它主要通过计算离最终位置的剩余距离,然后提供一系列的方法,如`computeScrollOffset()`,让开发者可以获取当前的滚动位置,从而更新View的状态。...

    Android仿ViewPager,自定义Scroller模拟动画

    要自定义Scroller,我们需要继承Android的Scroller类,并重写其中的关键方法。这些方法包括`computeScrollOffset()`,它用于计算当前滑动的位置;`fling()`,用于启动一个快速滑动动画,通常在用户松开手指后调用;...

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

    第二步:使用 Scroller 的 startScroll() 方法来启动滑动,startScroll() 方法传入一些参数,包括开始位置、结束位置、开始时间和滑动到结束位置的完成时间。 ``` mScroller.startScroll(int startX, int startY, ...

    Android用Scroller实现一个可向上滑动的底部导航栏

    首先,让我们了解一下Scroller类的基本使用方法。Scroller类提供了两个重要的方法:startScroll和computeScroll。startScroll方法用于启动一个滚动动画,而computeScroll方法用于计算当前的滚动位置。 startScroll...

Global site tag (gtag.js) - Google Analytics