Pro Android学习笔记(一四三):触摸屏(2):VelocityTracker
2014-11-01 11:55
375 查看
文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei。
利用MotionEvent,我们可以获知手指在屏幕滑过的速度,因为可以或者位置,间隔时间。Android提供了VelocityTracker类,必须自己计算,可以直接获取。Velocity实际也是从MotionEvent中获取信息。
下面是一个例子,小例子很简单,一个LinearLayout,上面有一个TextView,用于显示速度信息。
例子代码如下:
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:
/* 【5】回收,其他人可以用,我们将用在下一个动作。此外,我们不在ACTION_UP的时候计算,因为此时速度为0。
* 如果我们在游戏中计算抛投物体的速度,通常是ACTION_MOVE的最后速度,不要在ACTION_UP中计算。
* VelocityTracker是比较费资源的,因此当我们不需要的使用就应该recycle(),运行其他人使用,虽然
* Android允许多个VelocityTracker,但这会消耗大量内存,因此不同应recycle(),并重复使用 */
vt.recycle();
break;
default:
break;
}
return super.onTouchEvent(event);
}
}
相关小例子代码:Pro Android学习:touch screen小例子
相关链接:我的Android开发相关文章
利用MotionEvent,我们可以获知手指在屏幕滑过的速度,因为可以或者位置,间隔时间。Android提供了VelocityTracker类,必须自己计算,可以直接获取。Velocity实际也是从MotionEvent中获取信息。
下面是一个例子,小例子很简单,一个LinearLayout,上面有一个TextView,用于显示速度信息。
例子代码如下:
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:
/* 【5】回收,其他人可以用,我们将用在下一个动作。此外,我们不在ACTION_UP的时候计算,因为此时速度为0。
* 如果我们在游戏中计算抛投物体的速度,通常是ACTION_MOVE的最后速度,不要在ACTION_UP中计算。
* VelocityTracker是比较费资源的,因此当我们不需要的使用就应该recycle(),运行其他人使用,虽然
* Android允许多个VelocityTracker,但这会消耗大量内存,因此不同应recycle(),并重复使用 */
vt.recycle();
break;
default:
break;
}
return super.onTouchEvent(event);
}
}
相关小例子代码:Pro Android学习:touch screen小例子
相关链接:我的Android开发相关文章
相关文章推荐
- Pro Android学习笔记(一四三):触摸屏(2):VelocityTracker
- Pro Android学习笔记(一四四):触摸屏(3):多点触摸
- Pro Android学习笔记(一四六):触摸屏(5):自定义手势
- Pro Android学习笔记(一四二):触摸屏(1):MotionEvents
- Pro Android学习笔记(一四四):触摸屏(3):多点触摸
- Pro Android学习笔记(一四五):触摸屏(4):手势
- Pro Android学习笔记(一四六):触摸屏(5):自定义手势
- Pro Android学习笔记(一四二):触摸屏(1):MotionEvents
- Pro Android学习笔记(一一五):Location(1):Geocoder
- Pro Android学习笔记(一二七):Media Frameworks(2):MediaPlayer的音频播放
- Pro Android学习笔记(一三七):Home Screen Widgets(3):配置Activity
- Pro Android学习笔记(一五四):传感器(4):陀螺仪、加速传感器
- Pro Android学习笔记(一六四):联系人API(7):添加联系人
- 【转】Pro Android学习笔记(八):了解Content Provider(下中)
- 【转】Pro Android学习笔记(二三):用户界面和控制(11):其他控件
- 【转】 Pro Android学习笔记(三九):Fragment(4):基础小例子-续
- 【转】 Pro Android学习笔记(五四):调试和分析(2):View层次结构
- 【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常
- 【转】 Pro Android学习笔记(八六):了解Package(5):使用lib
- Pro Android学习笔记(七):了解Content Provider(下上)