TesterHome android app 编写历程(六)
2015-10-14 00:52
363 查看
前言
我们在使用QQ聊天的时候,或者说看网易新闻的时候,经常到会进到入聊天详情界面,以及新闻详情界面之后想要返回出来,这个时候我们一般习惯的就是点击左上角的返回按钮,但是这个按钮对于屏幕稍微大一些的手机来说就会变得相当的吃力,所以说就有了app 常用的一个功能-右滑返回。正文
针对于右滑返回我们需要考虑的就两点一个就是右滑的水平距离,以及右滑的水平速度获取到这两个值以后,对于我们的临界值如果超过了我们就直接结束当前的activity并且再加载一个activity退出的动画就可以了。获取水平的位移会比较简单,关键是要如何获取到水平滑动的速度。这里的话就需要用到一个类—-VelocityTrackerVelocityTracker
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); }
相关文章推荐
- Android设备相关
- android studio install
- icon+appname+key
- iOS简介
- app annie的可取功能和demo
- Android消息机制使用及详解
- Android隐式启动Activity匹配详解:Action,category,data
- LeetCode -- Happy Number
- 浅谈angular.js中实现双向绑定的方法$watch $digest $apply
- 利用 CMake 和 NDK 交叉编译 Android 下的可执行程序
- app手机应用市场免费资源分享-APP开发、APP定制、APP外包
- FlipViewPager 对item实现左右对折滑动翻页效果《IT蓝豹》
- [Swift]UIKit学习之UITextField的用法
- javascript 中 call apply 方法的区别
- IOS(Simulator)模拟器切换横竖屏的快捷键
- Android事件分发
- MindMapper中怎样插入关联性
- Android学习(十)AudioFlinger(2)
- Android客户端向服务器端传值——登录实现
- AppleWatch开发入门二——界面布局