今天大概的学习了一下

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. ansible基本模块-copy

    ansible   XXX   -m copy  -a  “src=XXX  dest=XXX  owner=root  group=root  mode=0755”

  2. Android 基于TCP多线程通信实现群聊天的功能

    1.TCP多线程原理图 2.实现方法 (1)服务器端 (2)客户端 3.java后台代码 主界面 package com.lucky.test50socket2; import android.ann ...

  3. [BZOJ 5415] 归程

    一棵KrusKal重构树,然而我数组开小了,忘记清空一个标记 洛谷传送门 BZOJ传送门 ......好像成权限题了Orz 回顾我们用KrusKal做生成树的时候,我们将边排序后连通各个连通块,那么边 ...

  4. UML类图关系(继承、泛化、实现、依赖、关联、聚合、组合)

    继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者 ...

  5. 2.在centos7虚拟机搭建nginx网站

    1.nginx配置目录 cd /etc/nginx/conf.d/ 添加 vi www.18cat.conf server{ listen 80; server_name www.18cat.com; ...

  6. python--交互器,编译器

    1在写python的时候调交互器的作用 唯一作用:调试代码 2.编译器

  7. Linux混杂设备驱动

    1. Linux混杂设备驱动模型 ① 在Linux系统中,存在一类字符设备,它们拥有相同的主设备号(10),但次设备号不同,我们称这类设备为混杂设备(miscdevice).所有混杂设备形成一个链表, ...

  8. Python 读取Excel数据 xlrd

    #导入相关模块 from xlrd import open_workbook #打开excel file = open_workbook("test.xlsx") #获取sheet ...

  9. VUE-CLI 设置页面title

    router > index.js { path: '/worklist', name: 'worklist', component: worklist, meta: {title:'维修工列表 ...

  10. 设置IIS允许下载.config文件

    <configuration> <system.webServer>        <security>            <requestFilteri ...