zoukankan      html  css  js  c++  java
  • 滑动关闭activity

    // 手指上下滑动时的最小速度
    private static final int YSPEED_MIN = 1000;

    // 手指向右滑动时的最小距离
    private static final int XDISTANCE_MIN = 50;

    // 手指向上滑或下滑时的最小距离
    private static final int YDISTANCE_MIN = 100;

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

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

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

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

    // 用于计算手指滑动的速度。
    private VelocityTracker mVelocityTracker;

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
    createVelocityTracker(event);
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
    xDown = event.getRawX();
    yDown = event.getRawY();
    break;
    case MotionEvent.ACTION_MOVE:
    xMove = event.getRawX();
    yMove = event.getRawY();
    // 滑动的距离
    int distanceX = (int) (xMove - xDown);
    int distanceY = (int) (yMove - yDown);
    // 获取顺时速度
    int ySpeed = getScrollVelocity();
    // 关闭Activity需满足以下条件:
    // 1.x轴滑动的距离>XDISTANCE_MIN
    // 2.y轴滑动的距离在YDISTANCE_MIN范围内
    // 3.y轴上(即上下滑动的速度)<XSPEED_MIN,如果大于,则认为用户意图是在上下滑动而非左滑结束Activity
    if (distanceX > XDISTANCE_MIN
    && (distanceY < YDISTANCE_MIN && distanceY > -YDISTANCE_MIN)
    && ySpeed < YSPEED_MIN) {
    overridePendingTransition(R.anim.push_right_in,
    R.anim.push_right_out);
    finish();
    }
    break;
    case MotionEvent.ACTION_UP:
    recycleVelocityTracker();
    break;
    default:
    break;
    }
    return super.dispatchTouchEvent(event);
    }

    /**
    * 创建VelocityTracker对象,并将触摸界面的滑动事件加入到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;
    }

    /**
    *
    * @return 滑动速度,以每秒钟移动了多少像素值为单位。
    */
    private int getScrollVelocity() {
    mVelocityTracker.computeCurrentVelocity(1000);
    int velocity = (int) mVelocityTracker.getYVelocity();
    return Math.abs(velocity);
    }

  • 相关阅读:
    android基于adb的性能测试
    mysql-3 数据表的创建、增删改查
    17.3.16---python内建函数
    17.3.15---C语言详解FILE文件操作
    17.3.15---关于GPIO控制流水灯的信息
    17.3.15---关于GPIO学习笔记
    17.3.14--对于时钟的知识,涉及到的总结
    17.3.14对于面向对象的理解
    17.3.13--pycharm2和3的常识问题
    17.3.13--python编码问题
  • 原文地址:https://www.cnblogs.com/manmanlu/p/5594334.html
Copyright © 2011-2022 走看看