背景

需求是在系统应用模拟摇杆,达到对所有应用都能模拟输入的效果,所以一定会使用到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. LINUX TOMCAT
  2. 两道统计题(两次检测呈阳性,连续抛硬币)
  3. post提交的数据几种编码格式
  4. 英国帝国理工出品:SSIM对抗攻击
  5. 使用单例模式建立一个数据库连接简单示例
  6. 网易云推出“音街”APP 入局免费K歌市场
  7. C++还有前景吗?做服务器这一块可以吗?
  8. 蓝桥杯-----历届试题 小数第n位
  9. LinkedIn第三方登录
  10. PMP考试必备基础知识
  11. 使用python解析pdf文档中的单词导入到有道云词典中
  12. pdf在线预览功能的两种方法
  13. Nacos 原理 Jraft Distro Grpc 持续跟新中...
  14. python_文件统计问题:文件” seqs_fasta.txt”保存着具有fasta格式的100多个蛋白质氨基酸序列
  15. C++Builder:定时器Timer控件
  16. PS羽化N个像素后填充淡绿色
  17. 提示程序需要Windows 7 Service Pack 1或更高版本问题如何解决?
  18. 进程管理程序 - Supervisor - 学习/实践
  19. 教你用python在excel中“画画”
  20. 华为鸿蒙手机什么时候上市5g,5g手机什么时候上市 华为5g手机何时上市?

热门文章

  1. 神奇的python系列5:python基础数据类型三(字典)
  2. Instrumentation 实践详解
  3. 单条视频播放近4000w,如何利用“跟风效应”实现流量暴增?
  4. windows系统之powershell基础
  5. 数据库内数据的版本控制
  6. 全国31省城市化水平程度数据集(1990-2021年)
  7. 计算机网络 day3 广播风暴 - VLAN - Trunk
  8. IIS7 中多个版本php共存的方法
  9. 购物兔顺利通过360认证
  10. windows ORA-00020: maximum number of processes (150) exceeded