HarmonyOS 是否可以提供使用CAPI进行自定义组件的demo

HarmonyOS
2024-12-18 17:06:47
1654浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
superinsect

demo示例代码:

#include <functional>
#include "ArkUI/native_interface.h"
#include "ArkUI/native_node.h"
#include "ArkUI/native_type.h"
#include "drawing_canvas.h"
#include "drawing_color.h"
#include "drawing_path.h"
#include "drawing_pen.h"
#include "drawing_types.h"
struct UserCallback {
  std::function<void(ArkUI_NodeCustomEvent* event)> callback;
};
class ArkUINativeModule {
  public:
    ArkUINativeModule()
  {
  OH_ArkUI_QueryModuleInterface(ARKUI_NATIVE_NODE, ArkUI_NativeNodeAPI_1, nodeApi_);
  // 统一入口函数处理事件。
  nodeApi_->registerNodeCustomEventReceiver([](ArkUI_NodeCustomEvent* event) {
  auto* userData = reinterpret_cast<UserCallback*>(OH_ArkUI_NodeCustomEvent_GetUserData(event));
  userData->callback(event);
});
}
~ArkUINativeModule()
{
  nodeApi_->unregisterNodeCustomEventReceiver();
}
static ArkUINativeModule* GetInstance()
{
  static ArkUINativeModule nativeModule;
  return &nativeModule;
}
ArkUI_NativeNodeAPI_1* GetNodeAPI()
{
  return nodeApi_;
}
private:
  ArkUI_NativeNodeAPI_1* nodeApi_ = nullptr;
};
class MyBadge {
  public:
    MyBadge()
  {
  nativeModule_ = ArkUINativeModule::GetInstance()->GetNodeAPI();
  handle_ = nativeModule_->createNode(ARKUI_NODE_CUSTOM);
  userCallback_ = new UserCallback();
  // 设置自定义回调。
  userCallback_->callback = [this](ArkUI_NodeCustomEvent* event) {
  auto type = OH_ArkUI_NodeCustomEvent_GetEventType(event);
  switch (type) {
case ARKUI_NODE_CUSTOM_EVENT_ON_MEASURE:
OnMeasure(event);
break;
  case ARKUI_NODE_CUSTOM_EVENT_ON_LAYOUT:
  OnLayout(event);
  break;
  case ARKUI_NODE_CUSTOM_EVENT_ON_FOREGROUND_DRAW:
  OnForegroundDraw(event);
  break;
  default:
    break;
}
};
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
分享
微博
QQ
微信
回复
2024-12-18 18:39:15


相关问题
HarmonyOS提供自定义组件封装demo
1350浏览 • 2回复 待解决
HarmonyOS Web是否提供自定义dns方法
977浏览 • 1回复 待解决
CounterComponent样式是否可以自定义
875浏览 • 1回复 待解决
HarmonyOS 自定义组件使用
768浏览 • 1回复 待解决
HarmonyOS 自定义相机demo
1586浏览 • 1回复 待解决
返回按钮是否可以自定义事件?
960浏览 • 1回复 待解决
自定义组件onMeasureSize使用
1290浏览 • 1回复 待解决