当前位置:   article > 正文

【HarmonyOS】JavaUI组件触摸事件分发_鸿蒙中组件的事件分发机制

鸿蒙中组件的事件分发机制

熟悉Android开发的同学肯定对触摸事件分发比较了解,那么在HarmonyOS开发应用需要对触摸事件处理该怎么做呢,下面结合一个实际的案例来讲解一下。

【需求】

封装一个自定义组件CustomView,在组件上有个按钮Button可以响应点击事件,需要在点击按钮的时候只触发按钮的onClick事件不触发父组件的onTouch事件:

cke_264.png

伪代码如下:

  1. public class CustomView extends ComponentContainer implements Component.TouchEventListener {
  2. static final HiLogLabel LABEL_CUSTOMEVIEW = new HiLogLabel(HiLog.LOG_APP, 0x00201, "CUSTOMEVIEW");
  3. public CustomView(Context context) {
  4. super(context);
  5. init(context);
  6. }
  7. public CustomView(Context context, AttrSet attrSet) {
  8. super(context, attrSet);
  9. init(context);
  10. }
  11. public CustomView(Context context, AttrSet attrSet, String styleName) {
  12. super(context, attrSet, styleName);
  13. init(context);
  14. }
  15. private final void init(Context context) {
  16. this.setTouchEventListener(this);
  17. LayoutConfig layoutConfig = new LayoutConfig(LayoutConfig.MATCH_PARENT, LayoutConfig.MATCH_PARENT);
  18. Button button = new Button(context);
  19. button.setText("Button");
  20. button.setTextSize(48);
  21. this.addComponent(button,layoutConfig);
  22. button.setClickedListener(new Component.ClickedListener() {
  23. @Override
  24. public void onClick(Component component) {
  25. HiLog.info(LABEL_CUSTOMEVIEW,"button onClick");
  26. }
  27. });
  28. }
  29. @Override
  30. public boolean onTouchEvent(Component component, TouchEvent touchEvent) {
  31. HiLog.info(LABEL_CUSTOMEVIEW,"componentContainer onTouchEvent");
  32. return false;
  33. }
  34. }

实际效果是在点击Button的时候会先触发父组件的onTouchEvent 然后再触发Button的onClick事件:

cke_1536.png

【思路】

在Android开发中触摸事件从父组件向子组件分发,父组件可以对分发操作做拦截;子组件在onTouchEvent中消费触摸事件,并可以控制是否向父组件传递。

【实现】

根据这个思路,我们只需要控制Button的onTouch事件不向父组件传递即可。但HarmonyOS系统中有个区别于Android系统的地方:在Android中我们可以设置Button的Clickable属性为true,从而控制Button不向父组件传递TouchEvent,但是这个方法在HarmonyOS中无效。所以我们需要给Button添加onTouchEvent的回调,并控制返回值为true,消费掉Touch事件并不向父组件传递(API地址:Component.TouchEventListener-Interface-ohos.agp.components-Java API参考-HarmonyOS应用开发)

伪代码如下:

  1. button.setTouchEventListener(new Component.TouchEventListener() {
  2. @Override
  3. public boolean onTouchEvent(Component component, TouchEvent touchEvent) {
  4. return true;
  5. }
  6. });

效果如下:

cke_4406.png

【总结】

HarmonyOS中触摸事件分发和消费的思路基本与Android一致,只是个别API实现不同,只要掌握了思路对于同类型的问题都可以解决。

 欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/323370
推荐阅读
相关标签
  

闽ICP备14008679号