实现屏幕右划退出当前Activity(带动画效果)

我现在在开发手表中的应用,由于界面太小。界面没有返回键,退出时,又不希望老是按返回键,于是乎需要实现屏幕右划时退出当前的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>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值