鸿蒙开发实践——C-API版本XComponent接入

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之XComponent组件 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之XComponent组件。 阅读详情

C-API 版本使用XComponent总共分成了两个步骤:

  1. createSurface的时候创建XComponentSurface;

  2. startSurface的时候将CPP的XComponentSurface连接到ArkUI的Xcomponent上。

createSurface的时候主要做了以下的操作:

  1. 创建并将XComponentSurface记录到Map中:

void RNInstanceCAPI::createSurface(facebook::react::Tag surfaceId, std::string const& moduleName) {
  m_surfaceById.emplace(
    surfaceId,
    XComponentSurface(
      // ···
    surfaceId,
    moduleName)
  );
}
  1. 在XComponentSurface中创建rootView,用于挂载C-API的组件,并在Surface上统一处理Touch事件:
XComponentSurface::XComponentSurface(
//···
SurfaceId surfaceId,
std::string const& appKey)
: 
  //···
  m_nativeXComponent(nullptr),
  m_rootView(nullptr),
  m_surfaceHandler(SurfaceHandler(appKey, surfaceId)) {
    m_scheduler->registerSurface(m_surfaceHandler);
    m_rootView = componentInstanceFactory->create(
      surfaceId, facebook::react::RootShadowNode::Handle(), "RootView");
    m_componentInstanceRegistry->insert(m_rootView);
    m_touchEventHandler = std::make_unique<SurfaceTouchEventHandler>(m_rootView);
  }

startSurface的时候主要做了以下的操作:

  1. 在ArkTS侧创建XComponent,并设置id,type与libraryname属性。其中:

  • id:组件的唯一标识,又由InstanceID和SurfaceID共同组成,记录了此XComponent属于哪一个Instance与Surface;

  • type:node,标识该XComponent是一个占位组件,组件的实现都在C-API侧;

  • libraryname:表示C-API组件在哪个so库中实现,并加载该so库,自动调用该so中定义的Init函数。当前React Native for OpenHarmony默认的so名字rnoh_app。

XComponent({
    id: this.ctx.rnInstance.getId() + "_" + this.surfaceHandle.getTag(),
    type: "node",
    libraryname: 'rnoh_app'
})
  1. 在CPP侧的Init中调用registerNativeXComponent函数,该函数中调用了OH_NativeXComponent_GetXComponentId用于获取ArkTS设置的id,并根据id找到对应的Instance与Surface。同时还要获取nativeXComponent对象,记录ArkTS侧的XComponent。

if (OH_NativeXComponent_GetXComponentId(nativeXComponent, idStr, &idSize) !=
  OH_NATIVEXCOMPONENT_RESULT_SUCCESS) {
    ···
}
std::string xcomponentStr(idStr);
std::stringstream ss(xcomponentStr);
std::string instanceId;
std::getline(ss, instanceId, '_');
std::string surfaceId;
std::getline(ss, surfaceId, '_');
  1. 调用
OH_NativeXComponent_AttachNativeRootNode(
    nativeXComponent,
    rootView.getLocalRootArkUINode().getArkUINodeHandle());
写在最后

如果你觉得这篇内容让你有所收获,我想请你帮我三个小忙~

  • 点赞,转发,你们的 『点赞和评论』,是我创造的动力;

  • 关注小编,不定期分享技术知识

  • 同时请期待后续文章ing🚀

OpenHarmony实战开发-如何实现自定义绘制 (XComponent) XComponent组件作为一种绘制组件,通常用于满足开发者较为复杂的自定义绘制需求,例如相机预览流的显示和游戏画面的绘制。 阅读详情

相关推荐

HarmonyOS 开发实践——C-API版本XComponent接入

【代码】HarmonyOS 开发实践——C-API版本XComponent接入。

liuhaojiabin的博客 521

OpenHarmony/HarmonyOS基础组件之XComponent

可用于EGL/OpenGLES和媒体数据写入,并显示在XComponent组件。

坚果的博客 1万+

【鸿蒙实战开发】C-API版本XComponent接入

C-API 版本使用XComponent总共分成了两个步骤:createSurface的时候创建XComponentSurface;startSurface的时候将CPP的XComponentSurface连接到ArkUI的Xcomponent上。

HarmonyOSMN的博客 1554

鸿蒙5.0开发进阶:UI开发常用组件-自定义渲染 (XComponent)

XComponent组件作为一种渲染组件,通常用于满足开发者较为复杂的自定义渲染需求

Androidbye的博客 2726

鸿蒙(HarmonyOS)实战开发篇——C-API版本XComponent接入

C-API 版本使用XComponent总共分成了两个步骤:

lc748258的博客 1159

HarmonyOS 实战开发 —— C-API版本XComponent接入

【代码】HarmonyOS 实战开发 —— C-API版本XComponent接入。

CTrup的博客 398

鸿蒙next开发:UI开发-添加组件(自定义渲染 (XComponent))

本文详细介绍了鸿蒙系统(HarmonyOS)中XComponent组件的开发与应用,重点讲解了其在自定义渲染中的使用场景和实现方法。

qq_39652397的博客 1753

HarmonyOS Next开发学习手册——自定义绘制 (XComponent)

开发者在ArkTS侧使用如下代码,即可用XComponent组件进行利用EGL/OpenGLES渲染的开发。id : 与XComponent组件为一一对应关系,不建议重复。通常开发者可以在native侧通过OH_NativeXComponent_GetXComponentId接口来获取对应的id从而绑定对应的XComponent。说明如果id重复,在native侧将无法对多个XComponent进行区分。

maniuT的博客 1989

鸿蒙5.0实战案例:C-API版本XComponent接入

startSurface的时候将CPP的XComponentSurface连接到ArkUI的Xcomponent上。createSurface的时候创建XComponentSurface;

Maniu_666的博客 714

HarmonyOS NEXT实战开发:自定义绘制 (XComponent)

XComponent组件作为一种绘制组件,通常用于满足开发者较为复杂的自定义绘制需求,

hanyanyou的博客 1215

HarmonyOS Next开发学习手册——添加组件(自定义绘制 (XComponent))

开发者在ArkTS侧使用如下代码,即可用XComponent组件进行利用EGL/OpenGLES渲染的开发。id : 与XComponent组件为一一对应关系,不建议重复。通常开发者可以在native侧通过OH_NativeXComponent_GetXComponentId接口来获取对应的id从而绑定对应的XComponent。说明如果id重复,在native侧将无法对多个XComponent进行区分。

maniuT的博客 1606

HarmonyOS实战开发:XComponent-常用组件

XComponent组件作为一种绘制组件,通常用于满足开发者较为复杂的自定义绘制需求

2401_84194030的博客 1874

鸿蒙OpenHarmony【XComponent】渲染绘制

提供用于图形绘制和媒体数据写入的Surface,XComponent负责将其嵌入到视图中,支持应用自定义Surface位置和大小。

asfn123123的博客 1740

鸿蒙开发5.0案例分析:C-API版本XComponent接入

【代码】鸿蒙开发5.0案例分析:C-API版本XComponent接入。

2501_91726121的博客 270

ARM CoreSight架构

CoreSight架构是现代复杂SoC的“飞行数据记录仪”(黑匣子)和“精密诊断仪”的结合体。它彻底改变了嵌入式系统的调试方式,从传统的“盲人摸象”变成了拥有“上帝视角”,是ARM生态系统能够支撑起从微控制器到高性能服务器芯片如此广泛产品线的重要基石技术之一。

guigenyi的专栏 1420

干货——Joplin私人笔记安装部署

安全、隐私、免费、不限制的私人笔记的选择和搭建

vincentho1024的专栏 7875
上一篇: 鸿蒙开发实践——常见预置应用的跳转方式
下一篇: 鸿蒙面试必会:UIAbility组件生命周期分析,鸿蒙Ability的分类
猫猫码代码
博客等级 码龄6年 421粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值