Android的Scroller介绍

本文详细介绍了Android中的Scroller类,它是实现View平滑滚动的重要辅助类。Scroller可以控制视图滚动的平滑过程,通过startScroll方法设置初始位置和滚动距离,以及持续时间,再结合computeScrollOffset来获取当前滚动位置。Scroller与View的computeScroll方法配合,可以在自定义View中实现平滑滚动效果。此外,文章还提到了如何在面试中准备Scroller相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以提供的起始点和将要滑动的距离开始滚动。滚动会使用缺省值250ms作为持续时间。

参数

startX 水平方向滚动的偏移值,以像素为单位。负值表明滚动将向左滚动

startY 垂直方向滚动的偏移值,以像素为单位。负值表明滚动将向上滚动

dx 水平方向滑动的距离,负值会使滚动向左滚动

dy 垂直方向滑动的距离,负值会使滚动向上滚动

public void startScroll (int startX, int startY, int dx, int dy, int duration)

以提供的起始点和将要滑动的距离开始滚动。

参数

startX 水平方向滚动的偏移值,以像素为单位。负值表明滚动将向左滚动

startY 垂直方向滚动的偏移值,以像素为单位。负值表明滚动将向上滚动

dx 水平方向滑动的距离,负值会使滚动向左滚动

dy 垂直方向滑动的距离,负值会使滚动向上滚动

duration    滚动持续时间,以毫秒计。

public int timePassed ()

返回自滚动开始经过的时间

返回值

经过时间以毫秒为单位

五、补充

文章精选

[Scroller 粗浅理解](()

[ScrollTextView - scrolling TextView for Android](()

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. }

  • Demo的下载地址: [http://download.youkuaiyun.com/detail/linghu_java/5423269](()

下面更深一点介绍Scrooler&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值