本文共 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/