背景

需求是在系统应用模拟摇杆,达到对所有应用都能模拟输入的效果,所以一定会使用到InputManager。但是大多demo和文章 模拟摇杆和功能使用都是在同一个应用,所以可以自定义实现此类功能,不需要模拟构造MotionEvent给InputManager

相关代码和使用

  1. 建议先查看Google的对手柄处理文档,对手柄有一定的了解:https://developer.android.com/training/game-controllers/controller-input?hl=zh-cn

  2. 通过查看文档我们可以知道,手柄的摇杆输入其实是一个个MotionEvent,对于左摇杆,Android 会将水平方向移动报告为 AXIS_X 事件,将垂直方向移动报告为 AXIS_Y 事件。对于右摇杆,Android 会将水平方向移动报告为 AXIS_Z 事件,将垂直方向移动报告为 AXIS_RZ 事件。而每个方向的value值为-1.0(上/左)至 1.0(下/右)的float值。0为初始位置。

  3. 模拟代码

//构造MotionEvent 摇杆往下保留1s后还原到初始位置。
MotionEvent.PointerProperties[] properties = new MotionEvent.PointerProperties[1];properties[0] = new MotionEvent.PointerProperties();properties[0].id = 0;properties[0].toolType = 0;MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[1];pointerCoords[0] = new MotionEvent.PointerCoords();pointerCoords[0].clear();pointerCoords[0].setAxisValue(MotionEvent.AXIS_X,0f);pointerCoords[0].setAxisValue(MotionEvent.AXIS_Y,0.99f);//InputDevice.SOURCE_JOYSTICK为手柄摇杆MotionEvent event = MotionEvent.obtain(0,SystemClock.uptimeMillis(),MotionEvent.ACTION_MOVE,1,properties,pointerCoords,0,0,1.0f,1.0f,0,0,InputDevice.SOURCE_JOYSTICK,0);Log.d(TAG,"MotionEvent:"+event);InputManager.getInstance().injectInputEvent(event,InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);mHandler.postDelayed(new Runnable() {@Overridepublic void run() {pointerCoords[0].clear();pointerCoords[0].setAxisValue(MotionEvent.AXIS_X,0f);pointerCoords[0].setAxisValue(MotionEvent.AXIS_Y,0f);MotionEvent event = MotionEvent.obtain(0,SystemClock.uptimeMillis(),MotionEvent.ACTION_MOVE,1,properties,pointerCoords,0,0,1.0f,1.0f,0,0,InputDevice.SOURCE_JOYSTICK,0);Log.d(TAG,"MotionEvent2:"+event);InputManager.getInstance().injectInputEvent(event,InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);}},1000);

Android 模拟手柄摇杆输入,模拟MotionEvent相关推荐

  1. Android蓝牙手柄摇杆 十字按键监听手机focus焦点

    文章目录 先分析一下需求: 首先,手柄设备蓝牙连接到手机,这没什么说的,直接按照手柄的说明书进行连接即可. 其次,就是拦截,在`onKeyDown`方法中进行拦截. 第三,反馈背景的设置问题. 最后, ...

  2. android虚拟手柄摇杆的实现

    最近的项目开发中的一个任务是实现Android虚拟手柄界面,如图所示: 界面是一个SurfaceView,摇杆和按键都是通过画图显示出来的,这里详细介摇杆的实现,当用户点击摇杆即中间的黄球时,然后可以 ...

  3. android 手柄摇杆代码,android虚拟手柄摇杆的实现

    最近的项目开发中的一个任务是实现Android虚拟手柄界面,如图所示: 界面是一个SurfaceView,摇杆和按键都是通过画图显示出来的,这里详细介摇杆的实现,当用户点击摇杆即中间的黄球时,然后可以 ...

  4. C# webBrowser 自动登录淘宝 模拟点击输入 模拟点击无ID 无name的html元素按钮

    (淘宝已经限制第一次登录需要输入验证码了,在ie下登录一次,再运行代码,无法实现了,下面只是一个例子) private void Form1_Load(object sender, EventArgs ...

  5. python 简单获取手柄摇杆输入

    序言 本代码是在这个大佬的基础上进行修改,主要目的是针对树莓派小车的移动以及视角的控制,所以就只保留了摇杆的控制,舍弃了按键,想要完整版的可以去找大佬的代码 正文 import pygamepygam ...

  6. Android 使用uInput模拟手柄设备

    背景 前文说到需求,需要在系统应用里模拟手柄摇杆和按键.之前已经通过模拟KeyEvent实现按键,模拟MotionEvent实现摇杆大致实现了这个功能,但是遇到新的问题,有些游戏不识别按键,尤其是多人 ...

  7. android模拟量输入引脚,Android物联网应用 zigbee四输入模拟量的使用和编程 物联网设备2-四输入模拟量的使用.docx...

    接线图 在本设备中,四输入模块是插在zigbee板上的,这里有两种方式来进行使用: 这里的zigbee板如果通过zigbee进行无线通信,可以通过和内置在网关中的协调器进行通信,从而在网关上进行无线数 ...

  8. linux模拟手柄输入,linux下如何模拟按键输入和模拟鼠标

    查看/dev/input/eventX是什么类型的事件, cat /proc/bus/input/devices 设备有着自己特殊的按键键码,我需要将一些标准的按键,比如0-9,X-Z等模拟成标准按键 ...

  9. 记一次尝试用脚本模拟手柄打游戏(一)

    最近打游戏累了 想自动化打游戏 最开始是打算模拟键鼠方案的,但是吧,很快就遇到了问题. 对于常规的窗口来讲,ctypes库足以模拟键鼠输入了 但是进到第三人称视角的游戏里面吧,键盘模拟还好说,鼠标移动 ...

最新文章

  1. OCCI读写Oracle Spatial的SDO_Geometry
  2. 【个人总结】知识晶体的前中后台
  3. JavaScript——易班优课YOOC课群在线测试禁止右键和复制解决方案
  4. sqlite自己主动更新数据库
  5. 安装Microsoft Hololens开发环境
  6. [leetcode]347. Top K Frequent Elements
  7. android 微信两个服务的,微信上线两个新功能
  8. Haiku OS 的黎明
  9. 美团脱颖而出的经验_2016年脱颖而出的7个很棒的小开源项目
  10. springboot集成mongoDB 异常认证
  11. iframe关闭当前窗口_iframe 、 a标签、input标签
  12. 德软件开发者否认蓄意植入“心血”安全漏洞
  13. Javascript特效代码大全(420个)
  14. javacv 视频增加水印
  15. 部署bugzilla(bugzilla+apache+mysql+linux)
  16. 通过拉勾网分析数据分析职位现状
  17. 【Wechat】微信小程序注册以及认证流程
  18. ElementUI table 单元格编辑合并
  19. Web代理(HTTP代理)
  20. 敏感词过滤优化的解决方案

热门文章

  1. bindService的使用方法
  2. 魔兽争霸之最后的反击
  3. 股民居然集体起诉NVIDIA英伟达
  4. leetcode, LC33: 杨辉三角
  5. 压力变送器取压点如何选取
  6. 日語作文2010/1/11
  7. 如何用ChatGPT制作PPT
  8. Asp.Net 初级 高级 学习笔记
  9. HBase学习笔记(三)——布隆过滤器(Bloom Filter)的原理
  10. 【HTB系列】Bastard