今天大概的学习了一下

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/


android学习之VelocityTracker的更多相关文章

  1. Android学习路线总结,绝对干货

    title: Android学习路线总结,绝对干货 tags: Android学习路线,Android学习资料,怎么学习android grammar_cjkRuby: true --- 一.前言 不 ...

  2. Android 学习资源

    下面这些资源对Android开发来说是很有帮助的! 最常用的: Android开发官方网站:http://developer.android.com/index.html 这个网站应该是Android ...

  3. Android学习资料收集

    1.Android 学习之路 http://stormzhang.com/android/2014/07/07/learn-android-from-rookie/

  4. Android学习——第一个NDK程序

    在前面的学习中,我们已经讲解了关于NDK编程的环境搭建流程,简单的使用我们也通过官网本身自带的例子进行说明了.可是相信大家一定还存在这么的一个疑惑:“如果我要自己利用NDK编写一个Android应用, ...

  5. Android学习——windows下搭建Cygwin环境

    在上一篇博文<Android学习——windows下搭建NDK_r9环境>中,我们详细的讲解了在windows下进行Android NDK开发环境的配置,我们也讲到了在NDk r7以后,我 ...

  6. Android学习——windows下搭建NDK_r9环境

    1. NDK(Native Development Kit) 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP功能开发的工具,通过这个 ...

  7. Android学习第三天-打包常用命令

    在前面<Android学习第一天-adb常用命令>和 <Android学习第二天-android常用命令>两篇博文中,我们重点讲解了adb和android的常用命令,下面我们讲 ...

  8. 【Android学习】《Android开发视频教程》第一季笔记

    视频地址: http://study.163.com/course/courseMain.htm?courseId=207001 课时5    Activity基础概念 1.Android开发技术结构 ...

  9. Android 学习资料收集

    收集整理这份资料灵感来自于 trip_to_iOS, 征得同意引用了该资料的开头描述 收集整理这份资料主要帮助初学者学习 Android 开发, 希望能快速帮助到他们快速入门, 找到适合自己学习资料, ...

随机推荐

  1. SDK,JDk,Unity打包安卓apk

    SDK:软件开发工具包(缩写:SDK.外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包.软件框架.硬件平台.操作系统等建立应用软件时的开发工具的集合. ...

  2. [HAOI2018]反色游戏

    [Luogu4494] [BZOJ5303] [LOJ2524] LOJ有数据就是好 原题解,主要是代码参考 对于每一个联通块(n个点),其他的边一开始随便选,只需要n-1条边就可以确定最终结果. 所 ...

  3. 【AC自动机】【字符串】【字典树】AC自动机 学习笔记

    blog:www.wjyyy.top     AC自动机是一种毒瘤的方便的多模式串匹配算法.基于字典树,用到了类似KMP的思维.     AC自动机与KMP不同的是,AC自动机可以同时匹配多个模式串, ...

  4. js关于原型,原型链的面试题

    之前面试的时候遇到过原型和原型链方面的题目,具体的已经忘了,只记得当时回答的稀里糊涂,今天查了一些资料,把自己所理解的写出来,加深记忆. 1,前提 在js中,对象都有__proto__属性,一般这个是 ...

  5. 小a与星际探索---DP

    题目描述 小a正在玩一款星际探索游戏,小a需要驾驶着飞船从11号星球出发前往nn号星球.其中每个星球有一个能量指数pp.星球ii能到达星球jj当且仅当pi>pjpi>pj.同时小a的飞船还 ...

  6. 什么是RFID? 射频识别技术的特点及工作原理!

    RFID即Radio Frequency Identifcation,就是射频识别技术,这篇给大家讲述的就是这个射频识别技术.这里就涉及到射频,电磁学等等知识.看完这篇,你应该会对这些知识有些了解,大 ...

  7. css 浮动元素居中

    方法一 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  8. docker 解决容器时间与主机时间不一致的问题

    环境: 1.阿里云ecs服务器 2.docker 3.docker镜像 centos7.4.1708 方法一: 查看主机时间: [root@iZbp1625jeg61bc2zzfcotZ docker ...

  9. (Frontend Newbie) Web三要素(一)

    上一篇简单了解了Web发展的简要历史,本篇简单介绍前端开发的基本三要素:HTML.CSS.JavaScript中的HTML以及一些在开发.学习过程中易被忽视的知识点. HTML HTML全称是超文本标 ...

  10. 阿里云centos 7 中tomcat 自启动

    这里我的tomcat的安装路径为 /usr/local/tomcat 1 为tomcat添加自启动参数 catalina.sh在执行的时候会调用同级路径下的setenv.sh来设置额外的环境变量,因此 ...