標籤:android 滑動返回
今天突然心血來潮,想在自己的項目裡面加一個右滑finish介面的功能。思路很簡單就是攔截螢幕滑動事件,然後finish當前頁面,不多說了,上代碼吧。
第一步:利用VelocityTracker計算滑動速度,及一些附帶的代碼。
private VelocityTracker mVelocityTracker = null;//速度記錄器
private int getScrollVelocity() {
mVelocityTracker.computeCurrentVelocity(1000);
int velocity = (int) mVelocityTracker.getXVelocity();
return Math.abs(velocity);
}
/**
* 回收VelocityTracker對象。
*/
private void recycleVelocityTracker() {
mVelocityTracker.recycle();
mVelocityTracker = null;
}
/**
* 建立VelocityTracker對象,並將觸摸content介面的滑動事件加入到VelocityTracker中。
*
* @param event
*
*/
private void createVelocityTracker(MotionEvent event) {
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
mVelocityTracker.addMovement(event);
}
第二步:在activity攔截滑動事件,注意如果是重寫TouchEvent是先到介面子控制項之後才會傳遞到這個方法中,所以可能導致介面中只有極少的部分能夠擷取到滑動事件。
private float xDown, xMove;
//手指向右滑動時的最小速度
private static final int XSPEED_MIN = 200;
//手指向右滑動時的最小距離
private static final int XDISTANCE_MIN = 150;
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
createVelocityTracker(ev);
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDown = ev.getRawX();
break;
case MotionEvent.ACTION_MOVE:
xMove = ev.getRawX();
//活動的距離
int distanceX = (int) (xMove - xDown);
//擷取順時速度
int xSpeed = getScrollVelocity();
if (distanceX > XDISTANCE_MIN && xSpeed >XSPEED_MIN){
finish();
}
break;
case MotionEvent.ACTION_UP:
recycleVelocityTracker();
break;
default:
break;
}
return super.dispatchTouchEvent(ev);
}
本文出自 “Android開發記錄” 部落格,請務必保留此出處http://dyxiaoyu.blog.51cto.com/5805904/1439473