TesterHome android app 编写历程(六)

前言


我们在使用QQ聊天的时候,或者说看网易新闻的时候,经常到会进到入聊天详情界面,以及新闻详情界面之后想要返回出来,这个时候我们一般习惯的就是点击左上角的返回按钮,但是这个按钮对于屏幕稍微大一些的手机来说就会变得相当的吃力,所以说就有了app 常用的一个功能-右滑返回。

正文


针对于右滑返回我们需要考虑的就两点一个就是右滑的水平距离,以及右滑的水平速度获取到这两个值以后,对于我们的临界值如果超过了我们就直接结束当前的activity并且再加载一个activity退出的动画就可以了。获取水平的位移会比较简单,关键是要如何获取到水平滑动的速度。这里的话就需要用到一个类—-VelocityTracker

VelocityTracker

VelocityTracker主要应用于touch even。, VelocityTracker通过跟踪一连串事件实时计算出当前的速度

android.view.VelocityTracker主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率。用addMovement(MotionEvent)函数将Motion event加入到VelocityTracker类实例中.你可以使用getXVelocity() 或getXVelocity()获得横向和竖向的速率到速率时,但是使用它们之前请先调用computeCurrentVelocity(int)来初始化速率的单位 。
以上的几句话就概括了VelocityTracker的基本用法了。
下来我们看看具体的代码实现吧:

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    createVelocityTracker(event);
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            xDown = event.getRawX();
            break;
        case MotionEvent.ACTION_MOVE:

            break;
        case MotionEvent.ACTION_UP:
            xMove = event.getRawX();
            //活动的距离
            int distanceX = (int) (xMove - xDown);
            //获取顺时速度
            int xSpeed = getScrollVelocity();
            //当滑动的距离大于我们设定的最小距离且滑动的瞬间速度大于我们设定的速度时,返回到上一个activity
            if(distanceX > XDISTANCE_MIN && xSpeed > XSPEED_MIN) {
                finish();
                overridePendingTransition(R.anim.in_from_left,R.anim.out_from_right);
                return true;
            }
            recycleVelocityTracker();
            break;
        default:
            break;
    }
    return  super.dispatchTouchEvent(event);
}

/**
 * 创建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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值