Android 利用事件分发实现滑动Activity返回
2015-10-19 13:49
597 查看
/** * 支持滑动返回 * 继承该Activity则支持滑动返回 * @author 白玉梁 */ public class SlideBackActivity extends 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) { 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); } }
感谢原作者:http://www.apkbus.com/forum.php?mod=viewthread&tid=243621&extra=page%3D2
相关文章推荐
- 关于Android/IOS里边读取StreamingAsset目录 文件流
- Android design library(一)----------TabLayout
- Android自定义控件之TextView的展开与折叠
- Android循序渐进 - 4.1.2 Android四大组件之-Activity(初窥门径)
- android service 弹窗
- Android Looper 源码笔记
- Android学习文档之数据库操作
- Android系统的编译命令
- Android aidl 使用总结
- Android DownloadManager下载完成事件监听(系列4)
- [Android] 环境配置之Android Studio开发NDK
- android studio下的NDK开发详解
- android全屏与非全屏的切换设置
- Android Studio通过JNI调用NDK程序
- AndroidMainfest启动模式
- ListView卡顿优化过程,并解决与viewpager图片加载冲突的问题
- Android汉字转拼音
- 【Android】Activity右滑返回的实现
- Android DownloadManager下载进度查询(系列3)
- android项目的结构和布局