仿ios右滑界面返回功能

主要在基类中重写onTouchEvent方法:

//手指向右滑动时的最小速度
    protected static final int XSPEED_MIN = 200;

    //手指向右滑动时的最小距离
    protected static final int XDISTANCE_MIN=Settings.DISPLAY_WIDTH*2/3;

    //记录手指按下时的横坐标。
    protected float xDown;

    //记录手指移动时的横坐标。
    protected float xMove;

    //记录手指按下时的纵坐标。
    protected float yDown;

    //记录手指移动时的纵坐标。
    protected float yMove;


@Override
    public boolean onTouchEvent(MotionEvent event) {
        createVelocityTracker(event);
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                xDown = event.getX();
                yDown=event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                xMove = event.getX();
                yMove=event.getY();
                //活动的距离
                int distanceX = (int) (xMove - xDown);
                int distanceY=(int)(yDown-yMove);
                //获取顺时速度
                int xSpeed = getScrollVelocity();
                //当滑动的距离大于我们设定的最小距离且滑动的瞬间速度大于我们设定的速度时,返回到上一个activity
                if(Math.abs(distanceX)>Math.abs(distanceY)&&distanceX > XDISTANCE_MIN && xSpeed > XSPEED_MIN) {
                    finish();
                    //设置切换动画,从右边进入,左边退出
                    overridePendingTransition(R.anim.in_from_left, R.anim.out_to_right);
                    recycleVelocityTracker();
                }
                break;
            case MotionEvent.ACTION_UP:
                recycleVelocityTracker();
                break;
            default:
                break;
        }
        return true;
    }


 /**
     * 创建VelocityTracker对象,并将触摸content界面的滑动事件加入到VelocityTracker当中。
     *
     * @param event
     *
     */
    protected void createVelocityTracker(MotionEvent event) {
        if (mVelocityTracker == null) {
            mVelocityTracker = VelocityTracker.obtain();
        }
        mVelocityTracker.addMovement(event);
    }

    /**
     * 回收VelocityTracker对象。
     */
    protected void recycleVelocityTracker() {
        mVelocityTracker.recycle();
        mVelocityTracker = null;
    }

    /**
     * 获取手指在content界面滑动的速度。
     *
     * @return 滑动速度,以每秒钟移动了多少像素值为单位。
     */
    protected int getScrollVelocity() {
        mVelocityTracker.computeCurrentVelocity(1000);
        int velocity = (int) mVelocityTracker.getXVelocity();
        return Math.abs(velocity);
    }

in_from_left代码如下

<?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="500"
        android:fromXDelta="-100%"
        android:toXDelta="0" />

</set>

out_to_right代码如下

<?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="500"
        android:fromXDelta="0%p"
        android:toXDelta="100%p" />

</set>

距离和速度自己可以再调整。。。
如遇到listview和scrollview等将会失效,楼主是我解决方法是listview.setOnTouchListener(this);重写onTouch方法结果也可以实现。。有更好的方法 可以在此提供建议。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值