根据移动速度方向判断手势方向
2013-01-11 15:39
337 查看
private VelocityTracker mVt = null; private int mMoveCount = 0; private float mVx = 0; private float mVy = 0; public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: // 手指按下 mVt = VelocityTracker.obtain(); // 建立一个新的对象 mVt.addMovement(event); // 增加一个采样点 LogUtil.d("action down------------------------------------------vt===="); break; case MotionEvent.ACTION_MOVE: // 手指移动 event.getX(); event.getY(); // 添加采样点 LogUtil.d("action move------------------------------------------mMoveCount======" + mMoveCount++); mVt.addMovement(event); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_OUTSIDE: // 触摸事件结束 LogUtil.d("action up------------------------------------------"); // 设置速度的时间单位 1代表每毫秒移动多少像素 1000代表每秒移动多少像素 // 这个方法在获得速度之前必须要设置 mVt.clear();// 清空 mVt.recycle();// 回收vt对象的内存 break; } mVt.computeCurrentVelocity(1000); mVx = mVt.getXVelocity();// 得到当前手指在这一点移动的速度 mVy = mVt.getYVelocity();// 速度分为了x和y轴两个方向的速度 int dir = judgeDir(mVx, mVy); if (mMoveCount==2) { if (dir == 1) {// right if (mIsConfiged) { currentToRightAnimation(); LogUtil.d("right right right right right right right right "); }else{ mMoveCount=0; } } else if (dir == 2) {// left if (mIsConfiged) { currentToLeftAnimation(); LogUtil.d("------------------left------------left------------left"); }else{ mMoveCount=0; } } else if (dir == 3) {// down currentToDownAnimation(); LogUtil.d("down down down down down down down "); } else if (dir == 4) {// up currentToUpAnimation(); LogUtil.d("up up up up up up up up "); } LogUtil.d("dir==================================================" + dir); } if(dir==0){ mMoveCount=0; } return true; } private int judgeDir(float vx, float vy) { if (vx >= 0 && Math.abs(vy / vx) <= Math.sqrt(3) / 3) // 小于30度 { // img1.setImageResource(R.drawable.ic_launcher); // 方向是正右方 1 return 1; } else if (vx < 0 && Math.abs(vy / vx) <= Math.sqrt(3) / 3) { // img2.setImageResource(R.drawable.ic_launcher); // 方向是正左方 2 return 2; } else if (vy > 0 && Math.abs(vx / vy) <= Math.sqrt(3) / 3) { // img3.setImageResource(R.drawable.ic_launcher); // 方向是正下方 3 return 3; } else if (vy < 0 && Math.abs(vx / vy) <= Math.sqrt(3) / 3) { // img4.setImageResource(R.drawable.ic_launcher); // 方向是正上方 4 return 4; } return 0; }
相关文章推荐
- 一些有关Android图片的操作,判断方向,旋转,根据uri获取绝对路径,缩放与移动
- 移动应用滑动屏幕方向判断解决方案,JS判断手势方向
- 移动应用滑动屏幕方向判断解决方案,JS判断手势方向
- Unity 点乘(Dot)、叉乘(Cross)判断移动方向、朝向等向量问题
- js根据鼠标移动速度背景图片自动旋转的方法
- Unity判断手势的滑动方向,单点触摸和多点触摸,并获取刚触摸以及触摸结束事的坐标
- 利用UIPanGestureRecognizer 判断手势滑动方向
- 纯js 判断手势滑动方向
- android判断手势方向详解
- HTML5移动端通过touch事件判断手势方向及页面到达底部
- 根据移动终端(手机)请求头的UA信息,判断其操作系统
- 【Android原创】手势方向判断
- ASP判断是否移动设备访问,实现根据电脑或手机跳转到不同的站点
- Android 判断手势的滑动方向
- U3D-移动、朝向-根据当前摄像机的变化来调整方向
- 移动应用滑动屏幕方向判断解决方案
- H5移动端判断手势滑动方向
- 利用UIPanGestureRecognizer 判断手势滑动方向
- H5案例分享:移动端touch事件判断滑屏手势的方向
- js判断鼠标移动方向