皮皮网
皮皮网

【大唐游侠源码】【apktool源码编译】【vba源码下载】触摸查询源码_触摸查询系统开发

来源:大话私服源码 发表时间:2024-11-30 03:27:23

1.linux内核hid触摸源码hid-multitouch.c剖析
2.MotionEvent的getAction、getActionMask和getActionIndex的区别
3.UE4-Slate源码学习(四)FSceneViewport
4.Android Touch事件InputManagerService源码解析(二)
5.ESP32入门「09」:Arduino-ESP32 TOUCH API 详解
6.UE4-Slate源码学习(二)slate事件触发

触摸查询源码_触摸查询系统开发

linux内核hid触摸源码hid-multitouch.c剖析

       在Linux内核中,触摸查询触摸查询hid-multitouch.c文件负责实现通用的源码HID触摸驱动。驱动结构定义在mt_driver中,系统通过module_hdi_driver()函数构建模块。触摸查询触摸查询mt_devices数组定义了设备参数,源码遵循USB-HID协议,系统大唐游侠源码通过HID_DEVICE宏对各个字段赋值。触摸查询触摸查询

       mt_probe()函数执行初始化和配置多点触摸设备的源码操作,根据设备特性设置属性,系统启动硬件,触摸查询触摸查询并创建sysfs属性组。源码hid_parse()函数调用hid_open_report()解析HID报告,系统通过遍历数据并调用特定函数解析。触摸查询触摸查询hid_hw_start()函数启动底层HID硬件,源码而hid_connect()函数则实现连接功能。系统

       对于需要通过USB接入触摸面板且满足HID协议的场景,可以使用hid-multitouch.c。接上两块触摸面板后,内核生成对应的设备节点链接。验证结果显示,内核能够正常解析触摸面板的apktool源码编译数据,触摸事件上报亦正常。

MotionEvent的getAction、getActionMask和getActionIndex的区别

        在很多自定义View的场景中,都有可能需要重写onTouchEvent、dispatchTouchEvent等方法,这些方法都传入一个MotionEvent对象,一般来说,我们需要通过该MotionEvent对象来获取当前的手势动作,然后判断Action_Down、Action_Move、Action_Up来执行不同的操作逻辑。

        但是当我们看MotionEvent对象时,发现它有getAction、getActionMask和getActionIndex方法,而且在我们看第三方源码时,经常会看到这样的写法:

        同时也会看到这样的写法:

        这两种写法到底有什么区别呢?我们就来说一下MotionEvent的几种获取Action信息的方法。

        Android用一个位的整数值来表示一个TouchEvent事件,低8位表示Touch事件的具体动作,例如按下、抬起、移动等动作。高8位表示Touch事件中多点触控的索引值。

        从源码可以看出getActionMasked = getAction & MotionEvent.ACTION_MASK

        而MotionEvent.ACTION_MASK 是一个常量值,值为0xff,所以getActionMasked方法只保留了低8位的信息,也就是说只保留了触摸的动作信息。

        为什么看第三方源码时,有时候写getAction,有时候写getActionMasked呢?从上面的分析中可以看出来个所以然:

        getAction表示触摸动作的原始位信息,当没有多点触控时,高8位即为0,这个时候getAction == getActionMasked。所以当我们确定我们自定义的View不会使用到多点触控时,就可以直接使用getAction来表示具体的触摸动作。但如果需要使用多点触控,或者是不确定后面会不会使用多点触控,则使用getActionMasked则是最保险的操作,所以我们经常看到下面这两种写法:

        Android中是支持多点触控的,那么在高8位中是如何存储多点触控的索引信息的呢?举个例子来说:

        如果从getAction方法中返回的值是0x,则表示是第一个触控点的ACTION_DOWN操作。高8位是0表示第一个触控点,低8位是0表示ACTION_DOWN操作。

        同理,如果返回值是0x,则表示第二个触控点的ACTION_DOWN操作。

        也就是说,getAction返回值的低8位表示触摸动作的类型信息,而高8位表示触控点的索引信息,也就是哪一个触控点的事件。

UE4-Slate源码学习(四)FSceneViewport

       即视口是引擎中显示游戏画面的SWidget控件,也是编辑器中显示游戏内容的窗口。场景绘制视口(FSceneViewport)与SViewport绑定,用于场景渲染。鼠标捕获模式(EMouseCaptureMode)与鼠标锁定模式(EMouseLockMode)在项目设置中可配置,影响鼠标的交互。FSceneViewport事件处理包括鼠标按下(OnMouseButtonDown)、触摸开始(OnTouchStarted),事件响应后构造FReply,并更新几何体缓存、鼠标位置缓存。鼠标位置由绝对坐标转换为相对于视口的相对坐标。根据捕获状态和输入处理逻辑,事件最终被传递至PlayerController,通过PlayerInput管理。对于触摸输入,处理流程类似,调用InputTouch接口。

       移动事件(OnMouseMove)、vba源码下载触摸移动(OnTouchMoved)记录鼠标的Delta和NumMouseSample累计值,Tick时处理。ProcessAccumulatedPointerInput在Tick阶段调用,处理键盘、鼠标输入,相关流程见第二章。完成输入处理后,FEngineLoop调用FinishedInputThisFrame,最终在ProcessAccumulatedPointerInput中调用InputAxis,处理至PlayerController的InputAxis,存储在PlayerInput中。其他事件如鼠标释放(OnMouseButtonUp)、触摸结束(OnTouchEnded)同样遵循类似流程。

       若SWidget为视口,执行相关事件调用至ViewportClient接口,进而触发输入系统(PlayerController、PlayerInput、InputComponent)。日常游戏开发中,通过视口事件实现如旋转相机、广东麻将源码隐藏鼠标等操作。PlayerController提供三种模式(FInputModeUIOnly、FInputModeGameAndUI、FInputModeGameOnly),通过调整SViewport和ViewportClient参数,实现不同模式下的捕获、锁定、显隐鼠标功能。所讨论内容基于UE4版本4..2。

Android Touch事件InputManagerService源码解析(二)

       解析Android Touch事件分发过程,深入InputManagerService源码。触摸事件的产生与传递机制是本文探讨的核心。

       InputDispatcher接收到事件,通过enqueueInboundEventLocked接口将事件放入mInboundQueue队列,等待分发处理。

       InputDispatcher内部线程在有事件时被唤醒,执行dispatchOnce,根据事件类型调用dispatchMotionLocked进行处理。处理流程涉及找到要处理事件的窗口。

       窗口查找通过findFocusedWindowTargetsLocked方法实现,串口监听源码该方法从map中获取focusedWindowHandle和focusedApplicationHandle,存储目标窗口信息。

       这些句柄的初始化在Activity的生命周期回调中,如Activity.onResume时。具体路径涉及ActivityTaskManagerService、DisplayContent、InputMonitor和InputManagerService。

       分发循环由prepareDispatchCycleLocked、enqueueDispatchEntryLocked和enqueueDispatchEntriesLocked方法实现,最后调用startDispatchCycleLocked,将事件发送给对应进程。

       InputReader持续从底层读取事件,InputDispatcher通过线程处理分发,直至事件被发送至目标进程。本文深入解析了Touch事件的分发机制与关键步骤,提供了对Android触摸事件处理过程的全面理解。

ESP入门「」:Arduino-ESP TOUCH API 详解

       本文深入解读ESP芯片的触摸传感器及其API,通过实例程序展示应用功能,并附带源代码。

       触摸传感器是一种电容式器件,通过测量固定时间内GPIO引脚上的充电/放电频率来感应触摸。触摸时,手指电荷改变电路状态,导致计数器值变化,进而验证触摸动作。这些引脚便于集成电容垫,替代机械按钮。

       触摸传感器的API包含核心功能,如读取触摸数据、设置测量周期、附加中断、参数化中断处理以及唤醒模式控制。API支持通用和ESP芯片专用版本,满足不同需求。

       具体功能如下:

       touchRead():获取触摸传感器数据,计数器记录充电/放电周期数,变化指示触摸。

       touchSetCycles():配置测量周期,影响读数、阈值和精度。

       touchAttachInterrupt():将中断与触摸板关联,根据阈值触发。

       touchAttachInterruptArg():中断处理函数中加入参数。

       touchDetachInterrupt():解除中断与触摸板的关联。

       touchSleepWakeUpEnable():设置深度睡眠唤醒源。

       ESP芯片专用API包含:

       touchInterruptSetThresholdDirection():定义中断激活条件。

       touchInterruptGetLastStatus():获取中断状态,确认触摸状态。

       应用示例包括读取触摸传感器和使用中断检测触摸。源代码基于ESP Arduino Core文档。

       总结,本文旨在提供ESP触摸传感器及API的详尽介绍,通过实例和代码实现应用。敬请期待后续ESP开发教程更新。

       欢迎知友们参与讨论,提出意见和优化建议。

UE4-Slate源码学习(二)slate事件触发

       在探讨UE4-Slate源码学习中,首先进入概念理解阶段,虚拟触摸的开启会将鼠标左键操作转化为OnTouchStarted事件,使得编辑器下通过鼠标也能触发UI的触摸相关事件。实现这一功能的关键在于

       FSlateApplication类中两个方法:IsFakingTouchEvents()用于判断是否开启虚拟触摸,SetGameIsFakingTouchEvents()用于设置虚拟触摸状态。

       在平台调用Slate时,根据不同事件类型创建FPointerEvent对象,作为事件处理的载体,其包含触发事件的按键信息、鼠标位置、索引、是否为触摸事件等数据,用于后续事件的精确处理。

       Slate用户类FSlateUser包含了索引、鼠标位置、聚焦对象、捕获状态和WidgetPath等信息,通过实例化多个FSlateUser对象,程序可以追踪多个用户输入,例如在多人游戏场景中,能够精准识别当前谁触发了A键。

       聚焦和捕获功能分别通过Widget的聚焦和捕获机制实现,当聚焦后,事件将被相应Widget接收,并触发一系列聚焦相关的事件,如OnFocusReceived、OnFocusChanging、OnFocusLost等。以按钮点击为例,点击按钮触发OnMouseDown事件,若按钮被捕获,则移动到按钮外松开鼠标仍会触发按钮的OnMouseUp事件。

       在处理输入事件时,会涉及多种策略,如FArrangedWidget、FArrangedChildren和FWidgetPath等,用于确定事件处理的路径和流程。FEventRouter类根据输入事件和用户输入策略(FDirectPolicy、FToLeafmostPolicy、FTunnelPolicy、FBubblePolicy)来组织和分发事件。

       处理鼠标和触摸输入的流程分为OnMouseDown和OnTouchStarted,通过Route函数根据策略处理事件,实现事件的触发和响应。移动事件则通过OnMouseMove和OnTouchMoved处理,根据输入类型和用户状态执行相应操作。拖拽事件OnDragDetected则在拖拽开始时触发,允许开发者自定义拖拽行为和数据传递。

       最终,事件处理完成后,将调用相关函数清理记录,包括更新用户位置和路径,以及触发OnMouseUp或OnTouchEnded等事件。

       UE4-Slate源码的学习涵盖了事件触发、用户输入处理、事件路由策略等多个方面,理解这些机制和流程对于深入掌握Slate框架至关重要。源码版本4..2提供了丰富的功能和细节,为开发者提供了一套强大且灵活的UI管理解决方案。

相关栏目:百科