一对一语音聊天VelocityTracker 滑动速度跟踪器 简介

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

常用方法

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();
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章