天天看点

Pro Android学习笔记(一四三):触摸屏(2):VelocityTracker

文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei。

利用MotionEvent,我们可以获知手指在屏幕滑过的速度,因为可以或者位置,间隔时间。Android提供了VelocityTracker类,必须自己计算,可以直接获取。Velocity实际也是从MotionEvent中获取信息。

下面是一个例子,小例子很简单,一个LinearLayout,上面有一个TextView,用于显示速度信息。

Pro Android学习笔记(一四三):触摸屏(2):VelocityTracker

例子代码如下:

public class TestVelocityActivity extends Activity{

    private TextView textView = null;

    @Override

    protected void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState);

        setContentView(R.layout.test_velocity_activity);

        textView = (TextView)findViewById(R.id.vt_text);

    }

    private VelocityTracker vt = null;     

    @Override

    public boolean onTouchEvent(MotionEvent event) {

        switch(event.getAction()){

        case MotionEvent.ACTION_DOWN:

           //【1.1】通过静态消息VelocityTracker.obtain()获取对象

            if(vt == null){

                vt = VelocityTracker.obtain();

            }else{

                //【1.2】对于重用的vt,清空,回复初始状态

                vt.clear();

            }

            //【2】加入MotionEvent信息,这是获取的第一个event信息,速度为0。

            vt.addMovement(event);

            break;

        case MotionEvent.ACTION_MOVE:

            //【2】加入MotionEvent的信息,获得第二个event信息,就可以有效计算速度

            vt.addMovement(event);

            //【3】设置计算速度的单位 pixel/unit,unit为1,单位为pixels/ms,我们设置为1000,速度单位为pixels/s

            vt.computeCurrentVelocity(1000); //1秒1 pixel

            //【4】获取X方向和Y方向的速度,在调用getX|YVelocity()之前必须先执行computeCurrentVelocity()。

            textView.setText( "X速率为" + vt.getXVelocity()+ ",Y速度为" + vt.getYVelocity());

            break;

        case MotionEvent.ACTION_UP:

        case MotionEvent.ACTION_CANCEL:

                vt.recycle();           

            break;

        default:

            break;

        }

        return super.onTouchEvent(event);

    }

}

相关小例子代码:Pro Android学习:touch screen小例子

相关链接:我的Android开发相关文章