在iphone手机中有右划退出,但是在Android手机中却很少见,现在手机屏幕越来越大,单手拿手机可能会按不到右下角的物理返回键,这时右划退出就很方便了。
根据这个情况做了个右划退出:
可以对单独的Activity做一个右划退出,也可以对整个 App应用做右划退出,为了让整个应用实现右划退出,可以让所有的Activity继承自己的BaseActivity,然后在BaseActivity中添加代码:
//为了判断当前是否处于滑动状态,因为有时候滑动会和点击事件冲突
public boolean isSlide=false;
//手指上下滑动时的最小速度
private static final int YSPEED_MIN = 1000;
//手指向右滑动时的最小距离
private static final int XDISTANCE_MIN = 100;
//手指向上滑或下滑时的最小距离
private static final int YDISTANCE_MIN = 100;
//记录手指按下时的横坐标。
private float xDown;
//记录手指按下时的纵坐标。
private float yDown;
//记录手指移动时的横坐标。
private float xMove;
//记录手指移动时的纵坐标。
private float yMove;
//用于计算手指滑动的速度。
private VelocityTracker mVelocityTracker;
//重写的触摸方法
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
createVelocityTracker(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
xDown = event.getRawX();
yDown = event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
xMove = event.getRawX();
yMove= event.getRawY();
//滑动的距离
int distanceX = (int) (xMove - xDown);
int distanceY= (int) (yMove - yDown);
//获取顺时速度
int ySpeed = getScrollVelocity();
//关闭Activity需满足以下条件:
//1.x轴滑动的距离>XDISTANCE_MIN
//2.y轴滑动的距离在YDISTANCE_MIN范围内
//3.y轴上(即上下滑动的速度)<XSPEED_MIN,如果大于,则认为用户意图是在上下滑动而非左滑结束Activity
if(distanceX > XDISTANCE_MIN &&(distanceY<YDISTANCE_MIN&&distanceY>-YDISTANCE_MIN)&& ySpeed < YSPEED_MIN) {
isSlide=true;//判断是否在滑动(true:在滑动不可点击false:可点击)
Utils.log("滑动"+isSlide);
finish();
overridePendingTransition(R.anim.anim_left_in, R.anim.anim_right_out);
}
break;
case MotionEvent.ACTION_UP:
recycleVelocityTracker();
break;
default:
break;
}
return super.dispatchTouchEvent(event);
}
这样右划退出功能就能实现在整个App中,写完收工。