android学习之VelocityTracker

今天大概的学习了一下

VelocityTracker ,用来监控手势速度的,在View移动过程中,可以有个缓冲的移动。

 我觉得初步的使用起来是很简单的。

首先移动依靠的是Scroller类,Scroller中有个fling的方法,将MotionEvent的Up之后检测的手势速度提供给scroller之后,就可以自己完成滚动。

1.初始化有些变量:

private void init(Context context){

mScroller = new Scroller(getContext());

final ViewConfiguration configuration = ViewConfiguration.get(context);

mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();

mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();

}

configuration.getScaledTouchSlop()//获得能够进行手势滑动的距离
configuration.getScaledMinimumFlingVelocity()//获得允许执行一个fling手势动作的最小速度值
configuration.getScaledMaximumFlingVelocity()//获得允许执行一个fling手势动作的最大速度值

2.在触摸事件中处理:

@Override

public boolean onTouchEvent(MotionEvent event) {

obtainVelocityTracker(event);   //初始化mVelocityTracker

int action = event.getAction();

switch (action) {

case MotionEvent.ACTION_DOWN:

startY = event.getY();

if (mScroller.isFinished()) {

mScroller.abortAnimation();

}

break;

case MotionEvent.ACTION_MOVE:

//求伪瞬时速度

float moveY = event.getY();

scrollTo(0, (int) (getScrollY() + (startY - moveY)));

startY = event.getY();

break;

case MotionEvent.ACTION_UP:

final VelocityTracker velocityTracker = mVelocityTracker;

velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);

int initialVelocity = (int) velocityTracker.getYVelocity();  //获取Y轴的速度

if ((Math.abs(initialVelocity) > mMinimumVelocity) && getChildCount() > 0) {

fling(-initialVelocity);  //开始滚动

}

case MotionEvent.ACTION_CANCEL:

releaseVelocityTracker();  //要释放掉

break;

}

return true;

}

/**

*释放mVelocityTracker

*/

private void releaseVelocityTracker() {

if(null != mVelocityTracker) {

mVelocityTracker.clear();

mVelocityTracker.recycle();

mVelocityTracker = null;

}

}

/**

*释放初始化

*/

private void obtainVelocityTracker( MotionEvent event) {

if(null == mVelocityTracker) {

mVelocityTracker = VelocityTracker.obtain();

}

mVelocityTracker.addMovement(event);

}

down和move事件中就是简单的跟随手势移动了,主要的事件处理是在up中。

滚动的事件处理在fling方法中:

public void fling(int velocityY) {

mScroller.fling(getScrollX(), getScrollY(), 0, velocityY, 0, 0, -1080, 0);  //就是scroller的一个方法而已,很简单。

awakenScrollBars(mScroller.getDuration());

invalidate();

}

fling(getScrollX(), getScrollY(), 0, velocityY, 0, 0, -1080, 0);

最小Y      最大Y

我的Demo中只是简单的Y轴上的滚动,所以设置了最小最大Y轴上的移动距离。最小Y  最大Y  都是说的ScrollY这个属性。

有Scroller这个类。就少不了computScroll方法。

public void computeScroll() {

if (mScroller.computeScrollOffset()) {

int x = mScroller.getCurrX();

int y = mScroller.getCurrY();

scrollTo(x, y);

postInvalidate();

}

}

我的github地址:https://github.com/flyme2012

我的博客地址:http://www.cnblogs.com/flyme2012/

来自为知笔记(Wiz)

时间: 2024-10-16 06:52:04

android学习之VelocityTracker的相关文章

[学习总结]2、android中的VelocityTracker(获得速率用的类)

参考资料:http://blog.jrj.com.cn/4586793646,5298605a.html 感谢这位兄弟! android.view.VelocityTracker主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率,为up之后做一些效果用的. 1,用obtain()函数来获得类的实例. 2,常用的一些方法: 2.1,使用addMovement(MotionEvent event)函数将当前的移动事件传递给VelocityTracker对象,参数是事件对

Android 学习资料分享(2015 版)

我是如何自学Android,资料分享(2015 版) Tikitoo2015.02.11 10:21 1713 字 3932 次阅读 自己学了两三个月的Android,最近花了一周左右的时间写了个App--Diigoer(已开源),又花了一两周时间找工作,收到了两个Offer,也算是对自己学习的一种认可吧:我刚开始学习总结的--<我是如何自学Android,资料分享>,如果是初学Android 的话,不应该错过的,而今天这篇分享好这篇文章,相对于第一次写的会有所提升,所以建议先把上一篇看了,再

android学习路线:如何成长为高级工程师

博主参加了2014 CSDN博客之星评选,帮我投一票吧.点击给我投票前言之所以写这篇文章,是因为最近博客和我的开发群( 215680213 )中,不少小伙伴都让我讲讲android学习路线,所以我决定写一篇博客,来说明这个问题.既然有不少小伙伴来咨询这个问题,说明大家都还是想快速地提高技术,毕竟技术的提高是职业发展中不可或缺的一步,技术好了,才能得到认可,才能升职加薪.一般来说,快速提高技术是不太容易的,但是通过正确的方法加上辛勤的汗水是可以缩短这个过程的.或许有人会问,你凭什么来写这个学习路线

Android学习系列(17)--App列表之圆角ListView(续)

http://www.cnblogs.com/qianxudetianxia/archive/2011/09/19/2068760.html 本来这篇文章想并到上篇Android学习系列(16)--App列表之圆角ListView中的,但是若是如此就让大家错过一篇新的好的文章,着实可惜.上篇中我们使用shape,corners,gradient实现了一个渐变的圆角效果,但是在完文之后的实践中,我发现有时效果不甚满意,选中和放手的事件监听没有去正确的判断,然后渐变效果也比较单一,性能也觉得不是很快

Android学习笔记——关于onConfigurationChanged

从事Android开发,免不了会在应用里嵌入一些广告SDK,在嵌入了众多SDK后,发现几乎每个要求在AndroidManifest.xml申明Activity的广告SDK都会要求加上注明这么一句属性: android:configChanges="orientation|keyboard|keyboardHidden" 通过查阅Android API可以得知android:onConfigurationChanged实际对应的是Activity里的onConfigurationChan

Android学习笔记18:自定义Seekbar拖动条式样

Android学习笔记18:自定义Seekbar拖动条式样

问题:android学习内容破碎,我个人关于如何学习android的一些个人经历

android学习两个月心得 我于大三下学期,开始准备学习android,在寒假期间,学了毕向东的java视频的前10天,觉得还不错,上网找评论,他们都说,只要学到多线程就可以学习android了, 开学我就开始了android的学习,做了一些简单的UI,实现了几个简单Activity的信息传递和跳转.但是在学习的过程中我发现(到目前为止,大概两个月),android的知识点就像是一片又一片的花瓣,你可以任意挑选这去学习,没有一个权威的方向. 各种视频教程,图书,包括android的官方开发文档

Android 学习笔记 2 Android开发环境的安装(Eclipse Bundle)

搭建eclipse开发环境,一般要经过 安装JDK.安装Eclipse.下载Android SDK.在Eclipse中安装ADT.在Eclipse中配置Android SDK.通过SDK Manager对Android SDK进行管理等几个比较麻烦的步骤. 后来Google推出了 adt-bundle 将ATD.SDK整合到Eclipse中,这样对于新手来说就免去了很多步骤,入门更容易了. 在此推荐一个网站 http://tools.android-studio.org/ 可以免去搬梯子去And

Android学习心得(16) --- Dex文件结构实例解析(2)

我在博客上发表一些我的Android学习心得,希望对大家能有帮助. 这一篇我们讲述一下通过一个实例来分析dex文件结构和组成. 参考Leb128数据类型 Android学习心得(5) --- dex数据类型LEB128 参考实例分析学习理解dex文件结构Android学习心得(15) --- Dex文件结构解析(1) 参考baksmali工具使用Android学习心得(4) --- MAC下smali文件编写与运行 1.编译 我们通过一个例子来分析dex文件的构成 创建一个Hello.java文