博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Scroller简单用法
阅读量:2418 次
发布时间:2019-05-10

本文共 2059 字,大约阅读时间需要 6 分钟。

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) //使用默认完成时间250msmScroller.startScroll(int startX, int startY, int dx, int dy, int duration)mScroller.computeScrollOffset() //返回值为boolean,true说明滚动尚未完成,false说明滚动已经完成。这是一个很重要的方法,通常放在View.computeScroll()中,用来判断是否滚动是否结束。

scroller.abortAnimation();//中止滚动,执行后 getCurrX为0

;//强行中止滚动,执行此方法后 getCurrX为中止时的值

举例说明,自定义一个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();	}}

转载地址:http://efllb.baihongyu.com/

你可能感兴趣的文章
移动周刊第 205 期:Google 正式发布 ARCore 预览版、iOS 工程打包速度提升十倍的解决方案...
查看>>
八大 IoT 安全关键技术解析
查看>>
有钱 Python,没钱 PHP,编程语言也嫌贫爱富
查看>>
Docker是啥?容器变革的火花?
查看>>
假如从餐饮店的角度来看架构…
查看>>
这个充电宝太黑科技了,又小又不用自己带线,长见识了~
查看>>
HDC.2019后再发力,AppGallery Connect服务新升级
查看>>
网易云音乐热评的规律,44万条数据告诉你
查看>>
超神!GitHub 标星 5.5w,如何用 Python 实现所有算法?
查看>>
扛住100亿次请求——如何做一个“有把握”的春晚红包系统
查看>>
在北京看场雪为什么这么难?
查看>>
新年了,5G手机芯片,到底买谁?
查看>>
疫情之下「在家办公模式」开启,你该选择哪些远程协同工具?
查看>>
如何使用pdpipe与Pandas构建管道?
查看>>
远程办公的33种预测
查看>>
阿里巴巴架构师:十问业务中台和我的答案
查看>>
华为云发布三类六款计算实例 打造更强云端计算能力
查看>>
PHP 语言地位遭受挑战,PHP 程序员路在何方?
查看>>
PostgreSQL好评如潮,它是如何做到的?
查看>>
2017码云群英会,共享开源技术盛宴
查看>>