首页 > 代码库 > Android右滑返回上一界面

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