1. 程式人生 > >android 向右滑動關閉Activity

android 向右滑動關閉Activity

import android.content.Context;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;

/**
 * Created by Administrator on 2017/6/19/019.
 */

public class onRigthSlideUtils implements View.OnTouchListener {

    private final Context context;

    //手指向右滑動時的最小速度
    private static final int XSPEED_MIN = 200;

    //手指向右滑動時的最小距離
    private static final int XDISTANCE_MIN = 150;

    //記錄手指按下時的橫座標。
    private float xDown;

    //記錄手指移動時的橫座標。
    private float xMove;

    //用於計算手指滑動的速度。
    private VelocityTracker mVelocityTracker;

    public onRigthSlideUtils(View view, Context context){
        view.setOnTouchListener(this);
        this.context=context;
    }

    @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();
                //當滑動的距離大於我們設定的最小距離且滑動的瞬間速度大於我們設定的速度時,返回到上一個activity
                if(distanceX > XDISTANCE_MIN && xSpeed > XSPEED_MIN) {
                    finsh.onFinish();
                }
                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);
    }

    public interface finishActivity{
        void onFinish();
    };
    public  finishActivity finsh;

    public void setFinsh(finishActivity finsh) {
        this.finsh = finsh;
    }
}