仿ios右滑界面返回功能

来源:互联网 发布:java map 是否存在key 编辑:程序博客网 时间:2024/05/21 19:32

主要在基类中重写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方法结果也可以实现。。有更好的方法 可以在此提供建议。。

0 0