前言

功能需要,获取物理手柄数据(本文章只针对处于Android模式的手柄),然后转换成云需要的数据。手柄数据主要分为两款,一个是轴数据,一个是按键数据,下面分别来说明。

判断是否是手柄设备

    public static boolean isJoyStick(InputEvent event) {boolean sourceJoy = (event.getSource() & InputDevice.SOURCE_JOYSTICK) ==InputDevice.SOURCE_JOYSTICK || (event.getSource() & InputDevice.SOURCE_GAMEPAD) ==InputDevice.SOURCE_GAMEPAD;boolean hasJoyMotion = event.getDevice().getMotionRange(MotionEvent.AXIS_X) != null && event.getDevice().getMotionRange(MotionEvent.AXIS_Y) != null;return sourceJoy && hasJoyMotion;}

一是判断是否还有左滚轴,二是判断是否来源是手柄,至于为什么判断是否包含左滚轴,因为市面上很多遥控器都有轴且设备源包含手柄。加上左滚轴判断可以更精确。

按键数据

按键数据可通过dispatchKeyEvent or onKeyDown,onKeyUp获得,手柄数据如下:

  • KeyEvent.KEYCODE_BUTTON_A : 手柄A键
  • KeyEvent.KEYCODE_BUTTON_B : 手柄B键
  • KeyEvent.KEYCODE_BUTTON_X : 手柄X键
  • KeyEvent.KEYCODE_BUTTON_Y : 手柄Y键
  • KeyEvent.KEYCODE_BUTTON_THUMBL : 手柄左滚轴按下
  • KeyEvent.KEYCODE_BUTTON_THUMBR : 手柄右滚轴按下
  • KeyEvent.KEYCODE_BUTTON_START : 手柄Start键
  • KeyEvent.KEYCODE_BUTTON_SELECT : 手柄Select键(部分手柄叫BACK)
  • KeyEvent.KEYCODE_BUTTON_L1 : 手柄L1键(部分设备LB键)
  • KeyEvent.KEYCODE_BUTTON_R1 : 手柄R1键 (部分设备RB键)
  • KeyEvent.KEYCODE_BUTTON_L2 : 手柄L2键(部分设备LT键)
  • KeyEvent.KEYCODE_BUTTON_R2 : 手柄R2键(部分设备RT键)

轴数据

轴数据通过onGenericMotionEvent(MotionEvent event)此方法传递。
通常手柄的有轴数据的功能组为,左摇杆,有摇杆,方向盘与 L2,R2两个扳机键,除L2与R2只对应一个轴值外其他设备均对应X,Y两个轴值,下面一一介绍:

左摇杆

对应轴:MotionEvent.AXIS_X,MotionEvent.AXIS_Y
取值范围: [-1.0 , 1.0]
说明:X代表横向数据,Y代表纵向数据。
轴数据的获取方式为:

        value = event.getAxisValue(MotionEvent.AXIS_X);//左摇杆X轴value = event.getAxisValue(MotionEvent.AXIS_Y);//左摇杆Y轴

右摇杆

对应轴:MotionEvent.AXIS_Z,MotionEvent.AXIS_RZ
取值范围: [-1.0 , 1.0]
说明:Z代表横向数据,RZ代表纵向数据。
轴数据的获取方式为:

        value = event.getAxisValue(MotionEvent.AXIS_Z);//右摇杆X轴value = event.getAxisValue(MotionEvent.AXIS_RZ);//右摇杆Y轴

方向盘

对应轴:MotionEvent.AXIS_HAT_X,MotionEvent.AXIS_HAT_Y
取值范围: [-1.0 , 1.0]
说明:AXIS_HAT_X代表横向数据,AXIS_HAT_Y代表纵向数据。X == 1.0 && Y == 0 代表右边,其他方位参考此值。

轴数据的获取方式为:

        value = event.getAxisValue(MotionEvent.AXIS_HAT_X);//方向盘X轴value = event.getAxisValue(MotionEvent.AXIS_HAT_Y);//方向盘Y轴

左右扳机键(L2,R2)

部分手柄没有此轴。
对应轴:MotionEvent.AXIS_LTRIGGER,MotionEvent.AXIS_RTRIGGER
取值范围: [0 , 1.0]

轴数据的获取方式为:

        value = event.getAxisValue(MotionEvent.AXIS_LTRIGGER);//左扳机value = event.getAxisValue(MotionEvent.AXIS_RTRIGGER);//右扳机

结束

本篇文章对应的手柄模式需为Android模式,xBoxOne跟xBox360模式需读取usb数据且是另外一套数据解析模式。后续再说。Over。

Android手柄数据全解析相关推荐

  1. Android 屏幕旋转 全解析

    屏幕旋转一般的解决方案 关于屏幕旋转这里,之前一直没太注意,因为根据设备会有指定的屏幕旋转策略如: 开发手机应用时一直使用强制竖屏布局 开发平板设备一直使用横屏布局 开发系统应用,一般给两套即横竖各一 ...

  2. Android网络数据JSON解析使用总结

    一.JSON基础知识 (一)什么是json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于Java ...

  3. 2011 CES主角:Android 3.0全解析

    作者: | 出处:搜狐数码 | 2011-01-10 09:28:32 | 阅读 次 并且在作用了10.1英寸的屏幕之上,分辨率达到了笔记本电脑1280×800像素的水平,Android 3.0蜂窝系 ...

  4. Android系统启动过程全解析

    Android系统是一款基于Linux的移动操作系统,那么Android是如何启动起来的呢?本文就详细阐述Android系统的启动过程. 从内核之上,我们首先应该从文件系统的init开始,因为 ini ...

  5. 一篇好文之Android数据库 SQLite全解析

    项目效果地址: SQlite 1. 创建数据库 Android中使用SQlite,需要自己创建库,建表,添加数据!好在Android中提供了SQLiteOpenHelper类来帮助创建使用数据库,我们 ...

  6. Android操作Exif-ExifInterface全解析

    简介: Exif是一种图像文件格式,它的数据存储与JPEG格式是完全相同的.实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈.快门.白平衡.ISO.焦距.日期时间等各种和 ...

  7. 技术12期:如何设计rowkey使hbase更快更好用【大数据-全解析】

    HBase是一个分布式的.面向列的开源数据库存储系统,具有高可靠性.高性能和可伸缩性,它可以处理分布在数千台通用服务器上的PB级的海量数据. BigTable的底层是通过GFS来存储数据,而HBase ...

  8. 每日一句api Android,Android 图文数据JSON解析,金山词霸每日一句API的调用

    数据格式为 {"sid":"737", "tts":"http:\/\/news.iciba.com\/admin\/tts\/2 ...

  9. 李艾30场直播数据全解析,挖掘直播高转化技巧

    知瓜数据[数说大咖]专栏,聚焦各类播主直播数据,分析播主直播变化趋势,为从业者带来专业解读,捕捉行业风向.本期播主:李艾 . 经历过2020年的发展,直播的大众认知度与人群渗透率得到快速强化,从一线城 ...

  10. Android 主题设计全解析

    Android主题设计!有点乱? 初学Android的时候对Android的主题设计都是处在一种模糊的认知状态,为啥呢? 自定义时候的attr,普通view的style属性,activity以及app ...

最新文章

  1. About Firefox
  2. 两种方法可以达到背景图不缩放的效果
  3. openssl https 单向认证连接成功示例
  4. linux mysql io压力大_MySQL性能调优(四) Linux 磁盘IO
  5. tomcat 绑定ipv4端口
  6. 央行“意外“降息 专家称贷款买房者首先受益
  7. laravel 模型查询总结
  8. java中sofa并发访问,云上的日子:用块存储、文件存储还是对象存储?
  9. 我对前端技术更新的看法以及未来发展趋势预测
  10. 第一门编程语言,我应该学什么?
  11. Flex3与BlazeDS HelloWorld 详解
  12. Protel99SE WIN10系统下无法添加封装库的解决方法
  13. 2020计算机校友会大学排名,2020年校友会大学排名:一个世界一流大学,一个中国一流大学...
  14. 知道这4个隐藏资源网站的人非常少,难怪总是找不到资源
  15. 使用 className 修改样式属性
  16. 黄宇c语言第三次作业,北京交通大学黄宇黄宇老师C语言第1次作业.doc
  17. leet-code Z 字形变换详解
  18. time.h时间函数
  19. js 中从JSON中取出某个属性的值
  20. R和R-Studio安装

热门文章

  1. cat5e跑万兆_cat5e网线支持千兆吗?
  2. mysql 报表设计工具_如何使用报表创建工具Navicat创建报表
  3. 射频电路设计实录前言与第一章,目标市场分析
  4. 网络安全等级保护三级产品清单整理
  5. easyexcel导出excel文件之图片导出
  6. Python网络爬虫实现音乐下载器和图片下载器功能
  7. mac上调整phpstorm和webstorm的使用内存(默认是128m-750m) 避免卡顿
  8. 这才叫会PS,普通照片分分钟P成好莱坞海报!
  9. misc学习笔记2-图形密码
  10. opencv 基于haar特征的级联分类器实现图象识别原理