Android -- VelocityTracker_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > Android -- VelocityTracker

Android -- VelocityTracker

 2014/11/8 21:07:02  我爱物联网  程序员俱乐部  我要评论(0)
  • 摘要:VelocityTracker主要应用于touchevent,VelocityTracker通过跟踪一连串事件实时计算出当前的速度。方法//获取一个VelocityTracker对象,用完后记得回收//回收后代表你不需要使用了,系统将此对象在此分配到其他请求者staticpublicVelocityTrackerobtain();publicvoidrecycle();//计算当前速度,其中units是单位表示,1代表px/毫秒,1000代表px/秒,.
  • 标签:android

VelocityTracker                                                                      

主要应用于touch event, VelocityTracker通过跟踪一连串事件实时计算出当前的速度。

方法                                                                                   

//获取一个VelocityTracker对象, 用完后记得回收  
//回收后代表你不需要使用了,系统将此对象在此分配到其他请求者  
static public VelocityTracker obtain();  
public void recycle();   
//计算当前速度, 其中units是单位表示, 1代表px/毫秒, 1000代表px/秒, ..  
//maxVelocity此次计算速度你想要的最大值  
public void computeCurrentVelocity(int units, float maxVelocity);  
//经过一次computeCurrentVelocity后你就可以用一下几个方法获取此次计算的值  
//id是touch event触摸点的ID, 来为多点触控标识,有这个标识在计算时可以忽略  
//其他触点干扰,当然干扰肯定是有的  
public float getXVelocity();  
public float getYVelocity();  
public float getXVelocity(int id);  
public float getYVelocity(int id);

Code                                                                                   

public class VelocityTrackerTest extends Activity {  
    private TextView mInfo;  
    private VelocityTracker mVelocityTracker;  
    private int mMaxVelocity;  
    private int mPointerId;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
  
        mInfo = new TextView(this);  
        mInfo.setLines(4);  
        mInfo.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
        mInfo.setTextColor(Color.WHITE);  
  
        setContentView(mInfo);  
  
        mMaxVelocity = ViewConfiguration.get(this).getMaximumFlingVelocity();  
    }  
  
    @Override  
    public boolean onTouchEvent(MotionEvent event) {  
         if(null == mVelocityTracker) {  
            mVelocityTracker = VelocityTracker.obtain();  
        }  
        mVelocityTracker.addMovement(event);  
        final VelocityTracker verTracker = mVelocityTracker;  
        switch (event.getAction()) {  
            case MotionEvent.ACTION_DOWN:  
                //求第一个触点的id, 此时可能有多个触点,但至少一个  
                mPointerId = event.getPointerId(0);  
                break;  
  
            case MotionEvent.ACTION_MOVE:  
                //求伪瞬时速度  
                verTracker.computeCurrentVelocity(1000, mMaxVelocity);  
                float velocityX = verTracker.getXVelocity(mPointerId);  
                float velocityY = verTracker.getYVelocity(mPointerId);  
                recodeInfo(velocityX, velocityY);  
                break;  
  
            case MotionEvent.ACTION_UP:  
            case MotionEvent.ACTION_CANCEL:  
                  if(null != mVelocityTracker) {  
              mVelocityTracker.clear();  
              mVelocityTracker.recycle();  
              mVelocityTracker = null;  
                  }   
                break;  
  
            default:  
                break;  
        }  
        return super.onTouchEvent(event);  
    }  
  
  
    private static final String sFormatStr = "velocityX=%f\nvelocityY=%f";  
  
    /**  
     * 记录当前速度  
     *  
     * @param velocityX x轴速度  
     * @param velocityY y轴速度  
     */  
    private void recodeInfo(final float velocityX, final float velocityY) {  
        final String info = String.format(sFormatStr, velocityX, velocityY);  
        mInfo.setText(info);  
    }  
}

我是天王盖地虎的分割线                                                             

 

 

 

参考:http://blog.csdn.net/bingxianwu/article/details/7446799

发表评论
用户名: 匿名