【鸿蒙开发】-HarmonyOS开发中容易忽略的一个知识(触摸交互)

一、前言

在探索 HarmonyOS 的过程中,我们发现了许多有趣且实用的功能和特性。有些总是在不经意间或者触类旁通的找到。或者是某些开发痛点。其中,触摸交互是手机上逃无可逃、避无可避的,需要了解的东西,这也是我们在处理多重嵌套组件时了解到的东西。
该系列将着重分享、介绍HarmonyOS API11+的新版本特性或者奇奇怪怪的解决方案、BUG。(弃用API非必要不提及)

二、触摸热区

responseRegion(value: Array<Rectangle> | Rectangle)

在Android中,如果想一个控件的事件响应大于它本身,可以是使用Padding来扩大一个透明的区域。但是如果这个控件大小影响到了当前布局,使用Padding就不合适了。这时一般是选择重写当前页面的onTouchEvent,Java使用一个触摸代理解决,Kotlin也是如此,不过可以充分利用语法糖来简化代码。
HarmonyOS提供了一个API:responseRegion ,使用起来非常的简单:

 Button("Button")
   .responseRegion({ x: '-100%', y: '-100%', width: '300%', height: '300%' })
   .onClick(() => {
     
   })

在这里插入图片描述

从API的参数来看,接收一个Rectangle数组,所以区域的设置可以是漫天乱跑的。
Rectangle构造如下:
在这里插入图片描述

需要注意是的是:x、y是从组件自身左上角开始的,所以如果你需要扩充一倍的点击区域那就是如此:

{ x: ‘-100%’, y: ‘-100%’, width: ‘300%’, height: ‘300%’ }

三、触摸测试控制

hitTestBehavior(value: HitTestMode)

这个发现,其实也是因为使用触摸热区的时候,发现热区不生效,查来查去发现是Stack中的叠加。
因为在ArtkUI中,当Stack组件中有多个节点触摸区域重叠时,如两个节点,默认只会对显示在最上层的节点做触摸测试,若需要显示在下层的节点触发触摸测试(原话)。
所以出现这种情况的时候,需要给上层的节点设置hitTestBehavior为HitTestMode.Transparent。

 Stack() {
    Button('Fuck')
      .onTouch((event) => {
        
      })
  }
  .width("100%").height("100%")
  .hitTestBehavior(HitTestMode.Block)
  .onTouch((event) => {
   
  })

我是很迷糊的,因为Android写多了,感觉我没给组件设置事件凭什么拦截啊,现在写多了HarmonyOS也就习惯了。

HitTestMode目前也只有四种:
在这里插入图片描述
为什么要叫触摸测试呢?不懂。

四、事件独占控制

monopolizeEvents(monopolize: boolean)

顾名思义。”在一个窗口内,设置了独占控制的组件上的事件如果首先响应,则本次交互只允许此组件上设置的事件响应,窗口内其他组件上的事件不会响应。“
一般来说用在复杂的事件逻辑中的,或者图片操作啥的。

写在最后

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。随着鸿蒙的不断发展以及国家的大力支持,未来鸿蒙职位肯定会迎来一个大的爆发,只有积极应对变化,不断学习和提升自己,我们才能在这个变革的时代中立于不败之地。在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值