欢迎加群讨论: 杭州Android移动开发 216045581
做界面切换的时候研究了一下屏幕对手指滑动速度感应的功能,参考别人写了一个片段验证了一下velocitytracker这个类的功能
废话不多说了,果断先上图:
手指移动后:
接下来是大家期待的代码部分:
布局文件 activity_main:
在这里,我们只定义了一个TextView用来显示等下我们的手指移动的速度,这里我们把它初始化为:hello world
<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”
android:paddingBottom=”@dimen/activity_vertical_margin”
android:paddingLeft=”@dimen/activity_horizontal_margin”
android:paddingRight=”@dimen/activity_horizontal_margin”
android:paddingTop=”@dimen/activity_vertical_margin”
tools:context=”.MainActivity” >
<TextView
android:id=”@+id/tv”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”hello world” />
</RelativeLayout>
再下来是MainActivity:
public class MainActivity extends Activity{
private TextView tv;
private VelocityTracker vt=null;
protect void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=()findViewById(R.id.tv);
}
public boolean onTouchEvent(MotionEvent event){
int action=event.getAvtion();
switch(action){
case:MotionEvent.ACTION_DOWN:
if(vt==null){
//初始化velocityTracker的对象 vt 用来监测motionevent的动作
vt=VelocityTracker.obtain();
}else{
vt.clear();
}
vt.addMovement(event);
break;
case:MotionEvent.ACTION_MOVE:
vt.addMovement(event);
//代表的是监测每1000毫秒手指移动的距离(像素)即m/px,这是用来控制vt的单位,若括号内为1,则代表1毫秒手指移动过的像素数即ms/px
vt.computeCurrentVelocity(1000);
//这里x为正则代表手指向右滑动,为负则代表手指向左滑动,y的比较特殊,为正则代表手指向下滑动,为负则代表手指向上滑动
tv.setText(“the x velocity is”+vt.getXVelocity);
tv.append(“the y velocity is”+vt.getYVelocity);
break;
case:MotionEvent.ACTION_UP:
case:MotionEvent.CANCEL:
vt.recycle();
break;
}
return true;
}
}