通过onTouchEvent 事件实现判断手指滑动方向

今天在做2048的时候遇到的一个知识点,这里做一下总结

用到的知识点

  • Android屏幕坐标系
  • 常用的触发事件
  • 判断滑动方向
  • 获取手指触屏时的坐标

Android 屏幕坐标系

看张图 一目了然:

整个屏幕就是一个坐标系 ,左上角是 0.0 右下角是 X轴最大值和Y轴的最大值

常用的触屏事件

  • MotionEvent.ACTION_DOWN: 这个按下手指时触发的
  • MotionEvent.ACTION_MOVE: 移动时触发 ,我测试发现 按着不动也会触发
  • MotionEvent.ACTION_UP: 抬起时触发
  • MotionEvent.ACTION_CANCEL: 取消触发事件 这个系统 不会自动调用 由代码来执行

这里我只用到了按下(MotionEvent.ACTION_DOWN)抬起(MotionEvent.ACTION_UP)

判断滑动方向

先来看一张右划轨迹图

通过上面这个图可以看出滑动轨迹 ,我可以通过 比较 X轴和Y轴的移动距离 来判断是沿哪个轴移动的,哪个轴上的移动距离大就是沿哪个轴移动,拿上面这个右划动 示例:X轴的移动距离明显比Y轴大 ,所以得出是沿X轴移动 那么不是左划就是右划 ,那具体是左还是右呢,我可以让抬起时的X坐标减去 按下时的坐标 8-4 =4 是正数 那么就是 右划动 相反 负数就是左滑动

贴代码

package com.skymxc.demo.toucheventdemo;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {private float downX ;    //按下时 的X坐标private float downY ;    //按下时 的Y坐标@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}/*** 触屏事件* @param event* @return*/@Overridepublic boolean onTouchEvent(MotionEvent event) {String action = "";//在触发时回去到起始坐标float x= event.getX();float y = event.getY();switch (event.getAction()){case MotionEvent.ACTION_DOWN://将按下时的坐标存储downX = x;downY = y;Log.e("Tag","=======按下时X:"+x);Log.e("Tag","=======按下时Y:"+y);break;case MotionEvent.ACTION_UP:Log.e("Tag","=======抬起时X:"+x);Log.e("Tag","=======抬起时Y:"+y);//获取到距离差float dx= x-downX;float dy = y-downY;//防止是按下也判断if (Math.abs(dx)>8&&Math.abs(dy)>8) {//通过距离差判断方向int orientation = getOrientation(dx, dy);switch (orientation) {case 'r':action = "右";break;case 'l':action = "左";break;case 't':action = "上";break;case 'b':action = "下";break;}Toast.makeText(MainActivity.this, "向" + action + "滑动", Toast.LENGTH_SHORT).show();}break;}return super.onTouchEvent(event);}/*** 根据距离差判断 滑动方向* @param dx X轴的距离差* @param dy Y轴的距离差* @return 滑动的方向*/private int getOrientation(float dx, float dy) {Log.e("Tag","========X轴距离差:"+dx);Log.e("Tag","========Y轴距离差:"+dy);if (Math.abs(dx)>Math.abs(dy)){//X轴移动return dx>0?'r':'l';}else{//Y轴移动return dy>0?'b':'t';}}}

项目地址:https://github.com/sky-mxc/TouchEvent
暂时就这些吧。哪里不对的地方,欢迎指正

判断手指滑动方向 -- Android 学习之路相关推荐

  1. Untiy3D笔记之番外篇——判断手指滑动方向

    最近有一些微信的项目,虽然页面很简单,但配合手势后的效果却是很不错的.最基本的效果就是手指向上滑,页面配合css3出现一个展开效果,手指向下滑将展开的内容按原路径收起.其实就是一个简单的判断手指滑动方 ...

  2. uniapp 简单有效判断手指滑动方向

    @touchstart="touchStart"@touchend="touchEnd"@touchmove='move' 首先 是在uniapp中运用这三个方 ...

  3. androidstudio判断手指滑动方向_方向盘的黑科技有多“黑”

    Mercedes-Benz 从第一辆汽车发明到现在的一个多世纪里,有数不清的汽车品牌诞生,也有不少品牌衰败.而他们中间,真正敢说"我为汽车技术的革命与进步做出了贡献"的品牌却寥寥无 ...

  4. 移动端js判断手指滑动方向

    var startx, starty;//获得角度function getAngle(angx, angy) {return Math.atan2(angy, angx) * 180 / Math.P ...

  5. h5滚动时侧滑出现_H5触摸事件中如何判断用户滑动方向

    这次给大家带来H5触摸事件中如何判断用户滑动方向,H5触摸事件中判断用户滑动方向的注意事项有哪些,下面就是实战案例,一起来看一下. 接口 TouchEvent TouchEvent 是一类描述手指在触 ...

  6. html5触摸事件判断滑动方向,H5触摸事件中如何判断用户滑动方向

    这次给大家带来H5触摸事件中如何判断用户滑动方向,H5触摸事件中判断用户滑动方向的注意事项有哪些,下面就是实战案例,一起来看一下. 接口 TouchEvent TouchEvent 是一类描述手指在触 ...

  7. Android学习之路4——音乐播放器后台播放

    Android学习之路4--音乐播放器后台播放 一.实验题目 简单音乐播放器 二.实现内容 实现一个简单的播放器,要求功能有: 播放.暂停.停止.退出功能,按停止键会重置封面转角,进度条和播放按钮:按 ...

  8. android学习之路1:前车之鉴之开发环境搭建

    写程序两年有余了,朝九晚五的拼命工作着,却忘记了我们自己最初的梦想,忘却了最开始站在起跑线时的英姿勃发,渐渐的变成了coder,继续coding中. Android学习之路刚刚开始,目前大米属于小白阶 ...

  9. Android学习之路-----倒计时欢迎界面(更有条理)

    2019独角兽企业重金招聘Python工程师标准>>> Android学习之路-----倒计时欢迎界面(更有条理) 转载于:https://my.oschina.net/symahl ...

最新文章

  1. MySQL 中 MyISAM 中的查询为什么比 InnoDB 快?
  2. 【PP主数据】工作中心介绍
  3. 25个好用到爆的一行Python代码,建议收藏
  4. 调用Xvid编码器流程(基于xvid1.1.0)
  5. 自由口通信模式下计算机读写PLC存储区的程序
  6. Struts2-2.了解struts.xmlpackageactionresult的name属性
  7. Host is not allowed to connect to this MySQL server错误的解决办法
  8. 05Oracle P6培训系列:05创建项目
  9. Jon的Java程序员实习报告
  10. Kotlin如何写脚本
  11. php 微信自动全屏视频设置,微信H5视频自动弹出全屏播放的解决方案
  12. 科学计算机安卓图像,图形科学计算器Pro
  13. 中国传统文化的现代意义
  14. Android Studio 3.5以后 Plugins中搜索不到flutter插件,本地无法安装??
  15. 解决Chrome 内置的翻译功能翻译用不了
  16. Mysql数据表存在一对多数据合并
  17. Gorilla源码分析之gorilla/context源码分析
  18. BP神经网络原理分析及c++代码实现(下)
  19. 使用Drozer对Android四大组件进行测试
  20. 数缘社区上对libtom的介绍,贴过来先

热门文章

  1. ubuntu安装百度云盘(亲测可行)
  2. typescript中的数据类型
  3. 智慧农业五大应用项目
  4. 看听读写想练口语 免费
  5. SOA标准之----JBI架构思想
  6. 马云的感恩故事:善意,成就美好或传奇
  7. 深入理解java 的深拷贝和浅拷贝
  8. 瀚高数据库中插入回车换行符
  9. css3运动框架,CSS3 原子运动
  10. UnityShader——GPU GEM大气散射源码解析