ArkUI Engine – 命中测试与点击事件回调注册
内容提要
本文介绍了ArkUI中的命中测试流程,包括TouchTest方法和事件分发过程。TouchTest方法判断RenderNode是否能响应点击事件,然后根据Z轴排序调用子RenderNode的TouchTest方法。点击事件由window进行分发,每个RenderNode判断自身是否能响应点击事件,并将点击事件分发给子RenderNode。点击事件的处理通过ClickRecognizer类实现,可以注册点击事件回调。最后,文章提到了ArkUI中的点击事件绑定和触发过程。
延伸解读
HitTestMode 的四种模式与事件冲突处理
文章详细介绍了 HitTestMode 的四种模式:HTMDEFAULT、HTMBLOCK、HTMTRANSPARENT 和 HTMNONE。这些模式决定了 RenderNode 自身及子节点是否响应点击事件,以及是否阻挡其他节点的命中测试。开发者可以利用这些模式处理点击事件冲突,例如通过设置 HTMBLOCK 阻止子节点响应,或使用 HTMTRANSPARENT 允许事件穿透。理解这些模式有助于在复杂 UI 中精确控制事件分发。
ClickRecognizer 与点击事件回调注册
ClickRecognizer 是 ArkUI 中处理点击事件的核心类,它封装了点击回调及处理流程。开发者可以通过 SetOnClick 注册点击事件回调,并在 OnTouchTestHit 方法中将 ClickRecognizer 加入 TouchTestResult,从而参与命中测试。文章以 RenderMyCircle 为例,展示了创建 ClickRecognizer、重写 OnTouchTestHit 以及实现回调的三步流程,为自定义组件的事件处理提供了参考。
点击事件的绑定与触发机制
ArkUI 点击事件流程分为绑定和触发两个阶段,由 FocusNode 贯穿。绑定阶段,onClick 方法最终通过 ViewAbstractModel 注册到 FocusableComponent,并同步到 FocusNode;触发阶段,PipelineContext 分发事件到 FocusNode,执行注册的回调。这一机制要求组件必须可获取焦点,因此并非所有组件都能直接绑定点击事件。理解这一流程有助于排查点击事件不生效的问题。
Q&A
ArkUI中的命中测试流程是如何进行的?
ArkUI中的命中测试流程通过TouchTest方法判断RenderNode是否能响应点击事件,并根据Z轴排序调用子RenderNode的TouchTest方法。
什么是ClickRecognizer类,它的作用是什么?
ClickRecognizer类用于处理点击事件的回调和相关流程,它封装了点击事件的处理机制,允许注册点击事件回调。
RenderNode的TouchTest方法是如何判断自身是否能响应点击事件的?
RenderNode的TouchTest方法通过检查自身是否被禁用以及点击事件是否在可点击区域内来判断是否能响应点击事件。
ArkUI中点击事件的绑定过程是怎样的?
点击事件的绑定过程涉及将点击事件注册到组件上,确保组件可获取焦点,并通过FocusNode类进行事件的绑定。
HitTestMode在ArkUI中有什么作用?
HitTestMode定义了RenderNode如何响应点击事件,包括四种模式:HTMDEFAULT、HTMBLOCK、HTMTRANSPARENT和HTMNONE,影响事件的分发和响应。
ArkUI的点击事件触发过程是如何实现的?
点击事件的触发过程通过PipelineContext进行事件分发,最终调用FocusNode的点击事件回调,完成事件的响应。