今天大概的学习了一下

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. C++_标准模板库STL概念介绍4-算法

    STL包含很多处理容器的非成员函数: sort() copy() find() random_shuffle() set_union() set_intersection() set_differen ...

  2. D. Minimum Diameter Tree Round #528 (Div. 2)【树】

    一.题面 题目链接 二.分析 该题注意读题的时候有强调边的权值为非负(即可以为0),此题就是求树两个叶子节点之间的最短距离.为了使两个叶子节点之间的距离最短,那么其实就是让每个最后到叶子的那条路径尽量 ...

  3. MITK 手册

    可怜这么有用的开源竟然没有中文手册,   MITK Plugin Manuals Overview The Basic Image Processing Plugin The DataManager ...

  4. Java执行操作系统命令

    从网上学来的方法,sample: try { String[] cmd = new String[] { System.getenv("HOMEPATH") + "/te ...

  5. 集成 Jenkins 和 TestNG 实现自助式自动化测试平台

    背景介绍 在软件业十分成熟的今天,敏捷(Agile)开发在业界日益流行,而面临的挑战也日益增多,不断变化的用户需求.缩短的开发周期.频繁的部署上线.复杂的产品架构和团队组织,如何继续保证软件的质量是一 ...

  6. PIE SDK同态滤波

    1.算法功能简介 同态滤波是减少低频增加高频,从而减少光照变化并锐化边缘或细节的图像滤波方法. 同态滤波的流程为:空间域图像→对数运算→傅里叶正变换→同态滤波――傅里叶逆变换→指数运算→同态滤波结果. ...

  7. Git merge rebase cherry-pick 以及 游离commit 的测试

    Microsoft Windows [版本 10.0.17134.345] (c) Microsoft Corporation.保留所有权利. C:\Users\zhangyang\Desktop\b ...

  8. HTML问题 | 两个Input在同一行连着不留缝隙

    方法1:让两个 input 连在一起写 不换行 <div class="inputDiv"> <input type="text" place ...

  9. 原生态hadoop2.6平台搭建

     hadoop2.6平台搭建 一.条件准备 软件条件: Ubuntu14.04 64位操作系统,jdk1.7 64位,Hadoop 2.6.0 硬件条件: 1台主节点机器,配置:cpu 8个,内存32 ...

  10. 015-GenericEncodingFilter模板【解决全局乱码】

    package ${enclosing_package}; import java.io.IOException; import java.io.UnsupportedEncodingExceptio ...