Android(安卓)VelocityTracker的使用
16lz
2022-01-28
VelocityTracker是android中用于计算触摸速度的类,从其字面意思来看就是速度追踪,使用VelocityTracker的方法如下:
一、首先通过VelocityTracker的静态方法获得VelocityTracker对象
velocityTracker = VelocityTracker.obtain();
二、为VelocityTracker对象添加MotionEvent
velocityTracker.addMovement(event);
三、调用VelocityTracker的计算方法
velocityTracker.computeCurrentVelocity(1000);
上面的方法参数是一个int型的units,指的是计算的速度的单位,传1代表每毫秒的速度,传1000代表每秒的速度
四、获取速度值
xSpeed = velocityTracker.getXVelocity();ySpeed = velocityTracker.getYVelocity();
使用上面两个方法用于获取x方向和y方向的速度,可在上面两个方法中传递int类型的参数,用于指定触屏事件的id值,因为可能有多个触屏事件同时发生
五、使用完毕回收资源
velocityTracker.recycle();
上面五个步骤就是VelocityTracker的使用方法,下面通过一个demo来用一用VelocityTracker:
在布局文件中我们放入一个TextView,大小为横向纵向都填满父控件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_world" tools:context=".MainActivity" /></RelativeLayout>下面是Activity中的代码,当手指在屏幕上移动时,我们通过计算触屏的速度,然后在TextView中显示出来:
package com.example.testvelocity;import android.app.Activity;import android.os.Bundle;import android.view.MotionEvent;import android.view.VelocityTracker;import android.widget.TextView;public class MainActivity extends Activity{private TextView textView;private float xSpeed;private VelocityTracker velocityTracker; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textview); velocityTracker = VelocityTracker.obtain(); } @Override public boolean onTouchEvent(MotionEvent event) { velocityTracker.addMovement(event);switch(event.getAction()){case MotionEvent.ACTION_MOVE:velocityTracker.computeCurrentVelocity(1000);xSpeed = velocityTracker.getXVelocity();textView.setText("xSpeed = " + xSpeed);break;case MotionEvent.ACTION_UP:velocityTracker.recycle();break;} return super.onTouchEvent(event); }}
需要注意的是,我在开始写代码时,没有复写onTouchEvent方法,而是使用了onTouchListener,给TextView添加了onTouchListener监听器,然后在onTouch方法中写的上面的代码,后来发现用错了,不是为TextView添加onTouchListener监听器,而是复写Activity中的onTouchEvent方法才能达到效果。
上面的代码运行效果如下图:
更多相关文章
- 系出名门Android(7) - 控件(View)之ZoomControls, Include, Vide
- android访问mysql增删改查_Android(安卓)Studio连接数据库实现增
- Android的webview加载本地html、本apk内html和远程URL
- Android(安卓)获取控件的宽和高
- android读取plist文件
- Android之Handler用法总结
- android获取安装的应用程序
- 浅谈Java中Collections.sort对List排序的两种方法
- Python list sort方法的具体使用