Android 模拟手柄摇杆输入,模拟MotionEvent
背景
需求是在系统应用模拟摇杆,达到对所有应用都能模拟输入的效果,所以一定会使用到InputManager。但是大多demo和文章 模拟摇杆和功能使用都是在同一个应用,所以可以自定义实现此类功能,不需要模拟构造MotionEvent给InputManager
相关代码和使用
建议先查看Google的对手柄处理文档,对手柄有一定的了解:https://developer.android.com/training/game-controllers/controller-input?hl=zh-cn
通过查看文档我们可以知道,手柄的摇杆输入其实是一个个MotionEvent,对于左摇杆,Android 会将水平方向移动报告为 AXIS_X 事件,将垂直方向移动报告为 AXIS_Y 事件。对于右摇杆,Android 会将水平方向移动报告为 AXIS_Z 事件,将垂直方向移动报告为 AXIS_RZ 事件。而每个方向的value值为-1.0(上/左)至 1.0(下/右)的float值。0为初始位置。
模拟代码
//构造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相关推荐
- Android蓝牙手柄摇杆 十字按键监听手机focus焦点
文章目录 先分析一下需求: 首先,手柄设备蓝牙连接到手机,这没什么说的,直接按照手柄的说明书进行连接即可. 其次,就是拦截,在`onKeyDown`方法中进行拦截. 第三,反馈背景的设置问题. 最后, ...
- android虚拟手柄摇杆的实现
最近的项目开发中的一个任务是实现Android虚拟手柄界面,如图所示: 界面是一个SurfaceView,摇杆和按键都是通过画图显示出来的,这里详细介摇杆的实现,当用户点击摇杆即中间的黄球时,然后可以 ...
- android 手柄摇杆代码,android虚拟手柄摇杆的实现
最近的项目开发中的一个任务是实现Android虚拟手柄界面,如图所示: 界面是一个SurfaceView,摇杆和按键都是通过画图显示出来的,这里详细介摇杆的实现,当用户点击摇杆即中间的黄球时,然后可以 ...
- C# webBrowser 自动登录淘宝 模拟点击输入 模拟点击无ID 无name的html元素按钮
(淘宝已经限制第一次登录需要输入验证码了,在ie下登录一次,再运行代码,无法实现了,下面只是一个例子) private void Form1_Load(object sender, EventArgs ...
- python 简单获取手柄摇杆输入
序言 本代码是在这个大佬的基础上进行修改,主要目的是针对树莓派小车的移动以及视角的控制,所以就只保留了摇杆的控制,舍弃了按键,想要完整版的可以去找大佬的代码 正文 import pygamepygam ...
- Android 使用uInput模拟手柄设备
背景 前文说到需求,需要在系统应用里模拟手柄摇杆和按键.之前已经通过模拟KeyEvent实现按键,模拟MotionEvent实现摇杆大致实现了这个功能,但是遇到新的问题,有些游戏不识别按键,尤其是多人 ...
- android模拟量输入引脚,Android物联网应用 zigbee四输入模拟量的使用和编程 物联网设备2-四输入模拟量的使用.docx...
接线图 在本设备中,四输入模块是插在zigbee板上的,这里有两种方式来进行使用: 这里的zigbee板如果通过zigbee进行无线通信,可以通过和内置在网关中的协调器进行通信,从而在网关上进行无线数 ...
- linux模拟手柄输入,linux下如何模拟按键输入和模拟鼠标
查看/dev/input/eventX是什么类型的事件, cat /proc/bus/input/devices 设备有着自己特殊的按键键码,我需要将一些标准的按键,比如0-9,X-Z等模拟成标准按键 ...
- 记一次尝试用脚本模拟手柄打游戏(一)
最近打游戏累了 想自动化打游戏 最开始是打算模拟键鼠方案的,但是吧,很快就遇到了问题. 对于常规的窗口来讲,ctypes库足以模拟键鼠输入了 但是进到第三人称视角的游戏里面吧,键盘模拟还好说,鼠标移动 ...
最新文章
- OCCI读写Oracle Spatial的SDO_Geometry
- 【个人总结】知识晶体的前中后台
- JavaScript——易班优课YOOC课群在线测试禁止右键和复制解决方案
- sqlite自己主动更新数据库
- 安装Microsoft Hololens开发环境
- [leetcode]347. Top K Frequent Elements
- android 微信两个服务的,微信上线两个新功能
- Haiku OS 的黎明
- 美团脱颖而出的经验_2016年脱颖而出的7个很棒的小开源项目
- springboot集成mongoDB 异常认证
- iframe关闭当前窗口_iframe 、 a标签、input标签
- 德软件开发者否认蓄意植入“心血”安全漏洞
- Javascript特效代码大全(420个)
- javacv 视频增加水印
- 部署bugzilla(bugzilla+apache+mysql+linux)
- 通过拉勾网分析数据分析职位现状
- 【Wechat】微信小程序注册以及认证流程
- ElementUI table 单元格编辑合并
- Web代理(HTTP代理)
- 敏感词过滤优化的解决方案