HarmonyOS(70) ArkUI 事件分发拦截,事件冲突解决方案

1、onTouch执行顺序

在HarmonyOS开发中,触摸事件(onTouch事件)是用户与设备交互的基础,是所有手势事件组成的基础,有DownMoveUpCancel四种触摸事件的类型。手势均由触摸事件组成,例如,点击为Down+Up(但是经过博主测验发现,点击事件很容易触发成Down+Move+Up),滑动为Down+一系列Move+UpArkUI事件响应链收集,根据右子树(按组件布局的先后层级)优先的后序遍历流程

下面通过一个示例来介绍响应链收集的流程,示例伪代码如下:

build() {
   
   
  StackA() {
   
   
    ComponentB() {
   
   
      ComponentC()
    }

    ComponentD() {
   
   
      ComponentE()
    }
  }
}

其中A是最外层组件,B和D是A的子组件,C是B的子组件,E是D的子组件。界面效果示例以及组件树结构图如下:
在这里插入图片描述
本篇博文通过如下实际代码来模拟上图的效果,为每个组件都添加了onTouch事件。



struct Index {
   
   
  build() {
   
   
    Stack() {
   
   
      Column() {
   
   
        Text("C")
          .width(100).height(100).backgroundColor(Color.Yellow)
          .onTouch(event => {
   
   
            switch (event.type) {
   
   
              case TouchType.Down:
                console.log("touch C Down")
                break;
              case TouchType.Move:
                console.log("touch C Move")
                break;
              case TouchType.Up:
                console.log("touch C Up")
                break;
            }

          })

      }
      .width('50%')
      .height('50%')
      .position({
   
    x: 10, y: 10 })
      .backgroundColor(Color.Green)
      .onTouch(event => {
   
   
        switch (event.type) {
   
   
          case TouchType.Down:
            console.log("touch B Down")
            break;
          case TouchType.Move:
            console.log("touch B Move")
            break;
          case TouchType.Up:
            console.log("touch B Up")
            break;
        }
      })

      Column() {
   
   
        Text("E").width(100).height(100).backgroundColor(Color.White)
          .onTouch(event => {
   
   
            switch (event.type) {
   
   
              case TouchType.Down:
                console.log("touch E Down")
                break;
              case TouchType.Move:
                console.log("touch E Move")
                break;
              case TouchType.Up:
                console.log("touch E Up")
                break;
            }
          })
      }
      .position
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭梧悠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值