HarmonyOS 鸿蒙Next 事件拦截相关

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 事件拦截相关

.hitTestBehavior(this.expandHitTestMode).onTouch((value) => {
  switch (value.type) {
    case TouchType.Down:
      this.lastTouchY = value?.touches?.[0]?.y ?? 0
      break
    case TouchType.Move:
      let currentY = value?.touches?.[0]?.y ?? 0
      if (currentY >
      this.lastTouchY) {
        //手指想下滑动 
        LogUtils.d(TAG, "手指向下滑动")
        if (this.expandScroll.isAtEnd()) {
          this.expandHitTestMode = HitTestMode.Default
        }
      } else if (currentY <
      this.lastTouchY) {
        //手指向上滑动 
        LogUtils.d(TAG, "手指向上滑动")
        //如果在底部 
        if (this.expandScroll.isAtEnd()) {
          this.expandHitTestMode = HitTestMode.Block
          value.stopPropagation()
        }
      }
      this.lastTouchY = currentY
      break
  }
}) 

上边是我实现的逻辑 跟安卓的拦截有点区别,他不是实时的,比如这次我手势move的时候触发了我设置成HitTestMode.Block,但是我手只要没离开屏幕这个block不会生效的 其实就是bindsheet弹出的view手指一直往上拉可以把这个view向上带动,我想禁用这个特效.有啥好法子嘛


更多关于HarmonyOS 鸿蒙Next 事件拦截相关的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

禁止bindsheet上下拉可以试下在Builder上设置

.gesture(PanGesture({ direction: PanDirection.Up | PanDirection.Down })):

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-gestures-pangesture-V5

更多关于HarmonyOS 鸿蒙Next 事件拦截相关的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,事件拦截通常涉及对系统事件的捕获和处理,以实现对用户操作的定制化响应。对于Next事件拦截,主要关注的是在事件分发链条中的某个节点上,对即将到达目标的事件进行预处理或阻止其进一步传播。

在HarmonyOS中,事件拦截可以通过重写组件的特定方法来实现,例如通过重写onTouchEvent来拦截触摸事件,或者通过实现自定义的FocusChangeListener来拦截焦点变化事件。这些方法允许开发者在事件到达目标组件之前,根据业务逻辑进行拦截和处理。

对于更复杂的事件拦截需求,可能需要利用事件分发机制中的高阶特性,如事件传播路径的修改、事件类型的识别与过滤等。这些特性通常依赖于对HarmonyOS事件系统的深入理解,以及相应的API调用。

需要注意的是,事件拦截的实现应谨慎进行,以避免对系统的正常行为造成干扰。不当的事件拦截可能导致用户界面响应异常、操作逻辑混乱等问题。

如果开发者在事件拦截过程中遇到问题,建议查阅HarmonyOS官方文档,了解事件系统的详细机制及API使用方法。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部