判断手指滑动方向 -- Android 学习之路
来源:互联网 发布:手机免费vpn软件 编辑:程序博客网 时间:2024/05/16 14:21
通过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坐标 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** * 触屏事件 * @param event * @return */ @Override public 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
暂时就这些吧。哪里不对的地方,欢迎指正
0 0
- 判断手指滑动方向 -- Android 学习之路
- Untiy3D笔记之番外篇——判断手指滑动方向
- 移动端js判断手指滑动方向
- Untiy3D笔记之番外篇——判断手指滑动方向之角度篇
- 通过OnTouchEvent(Motionevent event)判断手指滑动方向
- 移动端网页判断手指触摸滑动的方向
- js判断手指滑动方向(移动端)
- 封装判断touch手指滑动方向的函数
- android 手指滑动顺时针逆时针判断
- android判断viewpager滑动方向
- Android 之 Galley, 手指滑动翻看图片
- 对于移动端浏览器touch事件的研究总结(4)判断手指滑动方向
- Android 判断手势的滑动方向
- Android 关于判断用户滑动方向
- Android studio开发中,监控手指的滑动方向,并做出相应的响应事件
- 判断滑动方向UITableView
- 判断scrollviewd滑动方向
- touch滑动判断方向
- 设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)
- dbFS计算
- 冒泡排序
- linux下各数据库安装及相关知识
- READING NOTE: Factorized Convolutional Neural Networks
- 判断手指滑动方向 -- Android 学习之路
- 2016/8/19
- 文件剪切的sh脚本实现
- zzuli oj 1917 连续子序列的价值和
- 设计模式:建造者模式(Builder)
- POJ 2115 C Looooops(扩展欧几里德 + 求解模线性方程)
- 【经典算法】——KMP,深入讲解next数组的求解
- android studio 构建文件_Gradle详解
- Hadoop on mesos 配置安装方法