我现在在开发手表中的应用,由于界面太小。界面没有返回键,退出时,又不希望老是按返回键,于是乎需要实现屏幕右划时退出当前的Activity,其实实现起来也比较简单,就是监听最外层布局的Touch事件即可:
头部相关常量为;
private LinearLayout llOutLayout;
private static final int XSPEED_MIN = 200;
private static final int XDISTANCE_MIN = 150;
private float xDown;
private float xMove;
private VelocityTracker mVelocityTracker;
1.首先找到最外层控件:
llOutLayout = (LinearLayout) findViewById(R.id.ll_out_layout);
2.监听它的Touch事件:
private void initEvents(){
llOutLayout.setOnTouchListener(this);
}
3.重写onTouch()方法;
@Override
public boolean onTouch(View v, MotionEvent event) {
createVelocityTracker(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
xDown = event.getRawX();
break;
case MotionEvent.ACTION_MOVE:
xMove = event.getRawX();
int distanceX = (int) (xMove - xDown);
int xSpeed = getScrollVelocity();
if(distanceX > XDISTANCE_MIN && xSpeed > XSPEED_MIN) {
finish();
overridePendingTransition(R.anim.in_from_left, R.anim.out_to_right);
}
break;
case MotionEvent.ACTION_UP:
recycleVelocityTracker();
break;
default:
break;
}
return true;
}
/**
* 创建VelocityTracker对象,并将触摸content界面的滑动事件加入到VelocityTracker当中。
*
* @param event
*
*/
private void createVelocityTracker(MotionEvent event) {
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
mVelocityTracker.addMovement(event);
}
/**
* 回收VelocityTracker对象。
*/
private void recycleVelocityTracker() {
mVelocityTracker.recycle();
mVelocityTracker = null;
}
/**
* 获取手指在content界面滑动的速度。
*
* @return 滑动速度,以每秒钟移动了多少像素值为单位。
*/
private int getScrollVelocity() {
mVelocityTracker.computeCurrentVelocity(1000);
int velocity = (int) mVelocityTracker.getXVelocity();
return Math.abs(velocity);
}
以上还添加的界面的跳转动画,要不然界面切换会很生硬的。
其中:4个动画分别为:
in_from_left .xml --->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator" >
<translate
android:duration="350"
android:fromXDelta="-100%"
android:toXDelta="0" />
</set>
in_from_right.xml -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator" >
<translate
android:duration="350"
android:fromXDelta="100%p"
android:toXDelta="0%p" />
</set>
out_to_left.xml -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator" >
<translate
android:duration="350"
android:fromXDelta="100%p"
android:toXDelta="0%p" />
</set>
out_to_right.xml ->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator" >
<translate
android:duration="350"
android:fromXDelta="0%p"
android:toXDelta="100%p" />
</set>