相关问题
WebView进程模型和渲染机制是什么
699浏览 • 1回复 待解决
组件状态修改与build渲染机制
315浏览 • 1回复 待解决
使用ArkUI和ArkTS如何运行深度学习模型
509浏览 • 1回复 待解决
在Stage模型下如何主动重新渲染UI
1522浏览 • 1回复 已解决
FA模型和Stage模型StartAbility使用差异
585浏览 • 1回复 待解决
Stage模型和FA模型的区别
1238浏览 • 1回复 待解决
TaskPool和Worker中任务调度机制
592浏览 • 1回复 待解决
动态化渲染节点诉求,需要确认XNode方案交付时间,需要提供相应API以及SDK
428浏览 • 1回复 待解决
鸿蒙插件化和热更新机制
1177浏览 • 1回复 待解决
如何进行全局异常捕获机制,类似ANR机制
564浏览 • 1回复 待解决
HitTestMode增加触摸测试类型:自身和子节点不响应触摸测试
448浏览 • 1回复 待解决
合理选择条件渲染和显隐控制
212浏览 • 1回复 待解决
使用LazyForEach渲染语法渲染组件,UI不刷新。
165浏览 • 1回复 待解决
鸿蒙NAPI机制具体的执行过程,如何实现js和c++通信的
11306浏览 • 1回复 待解决
有人知道在Stage 模型下ArkTS怎么和C++通信吗?
1017浏览 • 0回复 待解决
如何实现键盘避让机制
1031浏览 • 1回复 待解决
Mongodb集群节点故障恢复场景的分片中的所有Mongod节点宕机是什么?
2315浏览 • 1回复 待解决
鸿蒙是否有预授权机制?
2065浏览 • 1回复 待解决
ArkTS异步机制与执行顺序
223浏览 • 1回复 待解决
宕机的 Slave 节点如何恢复?
1937浏览 • 1回复 待解决
宕机的 Master 节点如何恢复?
1741浏览 • 1回复 待解决
Foreach循环渲染,数据源改变时的重复渲染
322浏览 • 1回复 待解决
云数据库MongoDB中单节点架构的Mongos节点的作用是什么?
4318浏览 • 1回复 待解决
PolarDB MySQL读写分离为什么当主节点负载很高时只读节点上负载却很低 ?
1359浏览 • 1回复 待解决
PolarDB MySQL读写分离为什么当主节点负载很高时只读节点上负载却很低
1701浏览 • 1回复 待解决
节点模型
当前模型是三棵树模型,分别为Component、Element和Render树,其中Component是作为前端UI组件的映射,一个UI组件对应一个Component,从Component生成对应的Element,来维护组件的树形结构和更新,Render被保存在Component和Element中,主要存储节点的属性信息,驱动绘制和更新。
渲染机制
布局
布局的过程就是通过各类布局的算法计算出每个RenderNode在相对空间上的真实大小和位置。
当某个节点的内容发生变化时,就会标记自己为needLayout,并一直向上标记到重绘边界(RepaintBoundary),从重绘边界开始,父节点将LayoutParam传给子节点,子节点据此计算尺寸大小和位置。
render_node.h
render_node.cpp
render_button.cpp
绘制
同布局一样,绘制也是一个深度遍历的过程,遍历调用每个RenderNode的Paint方法,此时的绘制只是根据布局算出来的大小和位置,在当前绘制的上下文记录每个节点的绘制命令。
对每个节点,绘制分为四个步骤:
① 如果当前节点需要分层,那么需要创建一个新的绘制上下文,并提供可以记录绘制命令的画布;
② 在当前的画布上记录背景的绘制命令;
③ 递归调用子节点的绘制方法,记录子节点的绘制命令;
④ 在当前的画布上记录前景的绘制命令。
render_node.cpp
rosen_render_context.cpp