用户滑动屏幕切换Activity #Android #Velo
2016-10-19 本文已影响68人
mmmwhy
我现在非常恨自己手贱选了安卓这门课,作业多的令人发指。不过自己选的课,哭着也要上完。本文主要讲解如何实现 滑动屏幕时切换Activity 更多见:iii.run
VelocityTracker简介
-
android.view.VelocityTracker主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率。
-
用addMovement(MotionEvent)函数将Motion event加入到VelocityTracker类实例中。
-
使用getXVelocity() 或getXVelocity()获得横向和竖向的速率到速率时,但是使用它们之前请先调用computeCurrentVelocity(int)来初始化速率的单位 。
-
使用recycleVelocityTracker()释放空间,循环使用。
当你需要跟踪触摸屏事件的速度的时候
使用obtain() 方法来获得 VelocityTracker 类的一个实例对象在onTouchEvent回调函数中,使用addMovement(MotionEvent)函数将当前的移动事件传递给VelocityTracker对象使用computeCurrentVelocity (int units)函数来计算当前的速度,使用 getXVelocity ()、 getYVelocity ()函数来获得当前的速度。
使用VelocityTracker
private void initView(){
entryLayout = (RelativeLayout)super.findViewById(R.id.entry);
entryLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
createVelocityTracker(event); //获取实例对象
switch(event.getAction()){
case MotionEvent.ACTION_DOWN: //
xDown=event.getX();
break;
case MotionEvent.ACTION_MOVE:
int xSpeed = getScrollVelocity();
xMove = event.getRawX();
int distanceX1 = (int) (xMove - xDown);
int distanceX2 = (int) (xDown-xMove);
if ((distanceX1 > XDISTANCE_MIN||distanceX2>XDISTANCE_MIN )&&(xSpeed>XSPEED_MIN)) {
openNew();
}
break;
case MotionEvent.ACTION_UP:
recycleVelocityTracker();
}
return true;
}
});
}
对于 MotionEvent
ACTION_DOWN: 表示用户开始触摸.
ACTION_MOVE: 表示用户在移动(手指或者其他)
ACTION_UP:表示用户抬起了手指
ACTION_CANCEL:表示手势被取消了
ACTION_OUTSIDE: 表示用户触碰超出了正常的UI边界.
ACTION_POINTER_DOWN:有一个非主要的手指按下了.
ACTION_POINTER_UP:一个非主要的手指抬起来了
其余部分代码
private int getScrollVelocity() {//计算移动距离
mVelocityTracker.computeCurrentVelocity(1000);
int velocity = (int) mVelocityTracker.getXVelocity();
return Math.abs(velocity);
}
private void createVelocityTracker(MotionEvent event){
if(mVelocityTracker == null){
mVelocityTracker = VelocityTracker.obtain(); //获得VelocityTracker类实例
}
mVelocityTracker.addMovement(event);//将事件加入到VelocityTracker类实例中
}
private void recycleVelocityTracker(){
mVelocityTracker.recycle();
mVelocityTracker = null;
}
private void openNew(){
Intent intent = new Intent(SCOSEntry.this,MainScreen.class);
Bundle bundle = new Bundle();
bundle.putString("message","FromEntry");
intent.putExtras(bundle);
startActivity(intent);
}