博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VelocityTracker 滑动速度跟踪器 简介
阅读量:4284 次
发布时间:2019-05-27

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

简介

可以用来监听手指移动改变的速度,一般用于滑动事件

 

常用方法

mVelocityTracker.obtain(); //创建mVelocityTracker.addMovement(event); //传入event事件mVelocityTracker.computeCurrentVelocity(1000); //计算滑动速度,传入速度的单位。值为1表示每毫秒像素数,1000表示每秒像素数mVelocityTracker.getXVelocity(); //X轴滑动速度mVelocityTracker.getYVelocity(); //Y轴滑动速度mVelocityTracker.clear(); //重置回初始状态mVelocityTracker.recycle(); //回收

 

先调用Obtain方法创建对象,

再把MotiionEvent对象添加到Velocity中,

然后computeCurrentVelocity计算速度

最后, 调用recycle()方法, 释放对象,调用完毕.

示例:

看下面代码注释就OK

VelocityTracker mVelocity;        public void init(){        mVelocity = VelocityTracker.obtain();//初始化    }     public boolean onTouchEvent(MotionEvent event) {        mVelocityTracker.addMovement(event);//添加监听        float x = event.getX();        float y = event.getY();        switch(event.getAction()){            case MotionEvent.ACTION_DOWN:                //滑动未结束,拦截事件,避免父容器滑动未结束就消费子view的滑动事件                if(!mScroller.isFinished()){                    mScroller.abortAnimation();                }                break;            case MotionEvent.ACTION_MOVE:                float translateX = x-lastX;                float translateY = x-lastY;                if(Math.abs(translateX)>Math.abs(translateY)){                    scrollBy(-(int)translateX,0);                }                break;            case MotionEvent.ACTION_UP:                int scrollX = getScrollX();                int scrollToChildIndex = scrollX/mChildWidth;                mVelocityTracker.computeCurrentVelocity(1000);//计算每秒移动像素数                float xVelocity = mVelocityTracker.getXVelocity();                if(Math.abs(xVelocity)>=50){//根据X轴速度判断是否翻页                    mChildIndex= xVelocity>0 ? mChildIndex-1 : mChildIndex +1;                }else{                    mChildIndex= (scrollX + mChildWidth/2) / mChildWidth;                }                mChildIndex=Math.max(0,Math.min(mChildIndex,mChildSize-1));                int dx = mChildIndex*mChildWidth - scrollX;                smoothScrollBy(dx,0);//处理滚动                mVelocityTracker.clear();                break;            default:                break;        }        lastX=x;        lastY=y;        return true;    }    private void smoothScrollBy(int dx, int dy){        mScroller.startScroll(getScrollX(),0,dx,0,500);        invalidate();    }

 

 

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

你可能感兴趣的文章
OK6410A 开发板 (八) 34 linux-5.11 OK6410A 内存管理第二阶段
查看>>
OK6410A 开发板 (八) 35 linux-5.11 OK6410A 内存管理第三阶段
查看>>
OK6410A 开发板 (八) 37 linux-5.11 OK6410A 内存管理第五阶段
查看>>
OK6410A 开发板 (八) 38 linux-5.11 OK6410A 为什么需要这么多内存管理器
查看>>
OK6410A 开发板 (八) 39 linux-5.11 OK6410A memblock 的 alloc 和 free
查看>>
OK6410A 开发板 (八) 40 linux-5.11 OK6410A buddy 的 alloc 和 free
查看>>
OK6410A 开发板 (八) 41 linux-5.11 OK6410A slab 的 alloc 和 free
查看>>
OK6410A 开发板 (八) 42 linux-5.11 OK6410A vmalloc 的 alloc 和 free
查看>>
OK6410A 开发板 (八) 43 linux-5.11 OK6410A memblock 的 消费者
查看>>
OK6410A 开发板 (八) 44 linux-5.11 OK6410A buddy 的 消费者
查看>>
OK6410A 开发板 (八) 47 linux-5.11 OK6410A 物理虚拟内存的管理
查看>>
OK6410A 开发板 (八) 48 linux-5.11 OK6410A linux内存管理总览
查看>>
OK6410A 开发板 (八) 49 linux-5.11 OK6410A linux用户空间虚拟内存的管理 VMA
查看>>
OK6410A 开发板 (八) 50 linux-5.11 OK6410A 基于VMA的sys_mmap与sys_brk
查看>>
OK6410A 开发板 (八) 51 linux-5.11 OK6410A glibc提供的mmap与malloc
查看>>
OK6410A 开发板 (八) 52 linux-5.11 OK6410A linux内存管理相关配置
查看>>
OK6410A 开发板 (八) 53 linux-5.11 OK6410A mmap的实例 基于 fb
查看>>
OK6410A 开发板 (八) 54 linux-5.11 OK6410A 缺页异常实例分析
查看>>
OK6410A 开发板 (八) 55 linux-5.11 OK6410A armv6 异常总览
查看>>
OK6410A 开发板 (八) 56 linux-5.11 OK6410A armv6 异常之访存异常
查看>>