VelocityTracker的使用方法

VelocityTracker简介

android.view.VelocityTracker主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率。用addMovement(MotionEvent)函数将Motion event加入到VelocityTracker类实例中.你可以使用getXVelocity() 或getXVelocity()获得横向和竖向的速率到速率时,但是使用它们之前请先调用computeCurrentVelocity(int)来初始化速率的单位 。

使用方法

  1. 创建VelocityTracker对象,并将触摸content界面的滑动事件加入到VelocityTracker当中。

    //创建VelocityTracker对象,并将触摸content界面的滑动事件加入到VelocityTracker当中。
    if (mVelocityTracker == null) {
    mVelocityTracker = VelocityTracker.obtain();
    }
    mVelocityTracker.addMovement(event);
  2. 获取手指在content界面滑动的速度。

    //设置移动速度单位为:像素/10000ms,即1000毫秒内移动的像素
    mVelocityTracker.computeCurrentVelocity(1000);
    //获取手指在界面滑动的速度。
    int velocity = (int) mVelocityTracker.getXVelocity();
  3. 回收VelocityTracker对象

    //回收对象
    mVelocityTracker.recycle();
    mVelocityTracker = null;

示例

下面我们写一个例子用来简单演示下VelocityTracker的使用方法,这个例子的功能很简单,就是捕获手指横向的滑动速度,并显示在一个TextView上。

public class MainActivity extends AppCompatActivity {

    private VelocityTracker mVelocityTracker;
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LinearLayout linearLayout = (LinearLayout) findViewById(R.id.line1);
        textView = (TextView) findViewById(R.id.txt1);

        linearLayout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                //创建VelocityTracker对象,并将触摸content界面的滑动事件加入到VelocityTracker当中。
                if (mVelocityTracker == null) {
                    mVelocityTracker = VelocityTracker.obtain();
                }
                mVelocityTracker.addMovement(event);

                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        break;
                    case MotionEvent.ACTION_MOVE:
                        //设置移动速度单位为:像素/10000ms,即1000毫秒内移动的像素
                        mVelocityTracker.computeCurrentVelocity(1000);
                        //获取手指在界面滑动的速度。
                        int velocity = (int) mVelocityTracker.getXVelocity();
                        textView.setText(velocity+"");
                        break;
                    case MotionEvent.ACTION_UP:
                        //回收对象
                        mVelocityTracker.recycle();
                        mVelocityTracker = null;
                        break;
                }
                return true;
            }
        });
    }
}

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/line1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:weightSum="1"
    tools:context="com.demo.ian.velocitytrackerdemo.MainActivity">

    <TextView
        android:id="@+id/txt1"
        android:layout_width="match_parent"
        android:layout_height="89dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:gravity="center"
        android:text="Hello World!"
        android:textAlignment="center"
        />
LinearLayout>

运行效果如下:

VelocityTracker的使用方法_第1张图片

你可能感兴趣的:(Android)