Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制)

这篇具有很好参考价值的文章主要介绍了Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制),Compose,android

一、概念

Compose 通过三个阶段把数据转化为UI:组合(要显示什么)、布局(要显示在哪里)、绘制(如何渲染)。

组合阶段

Compisition

界面首次渲染时会将可组合函数转化为一个个布局节点 Layout Node, 使用多叉树的数据结构构建一个UI树。

布局阶段

Layout

多叉树中父节点会测量他们的子节点,然后在一个二维空间里进行摆放。通过从上往下测量(如果存在子节点则测量子节点,测量完子节点后决定自身的尺寸)、从下往上摆放(根据子节点的尺寸摆放子节点)来决定该节点的宽高和坐标。

绘制阶段

Drawing

所有节点各自绘制自己在屏幕位置的像素。

Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制),Compose,androidCompose 自定义 - 数据转UI的三阶段(组合、布局、绘制),Compose,android

Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制),Compose,android

二、举例

Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制),Compose,android

2.1 组合阶段 Compisition

每个 Composable 函数都会映射成UI树的 layout node 。这是一个很简单的例子,事实上 Composable 可以包含逻辑和控制流(if else, when...),在不同的状态下产生不同的UI树。

Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制),Compose,android

2.2 布局阶段 Layout

从上往下测量,从下往上摆放:

  1. 系统要求根节点 Row 测量自身。
  2. 根节点 Row 要求第一个子元素 Image 测量自身。
  3. 由于 Image 是叶子节点(没有子节点)能确定自身的尺寸和摆放并上报。
  4. 根节点 Row 要求第二个子元素 Column 测量自身。由于 Column 是分支节点(有子节点)需要先测量所有子元素来确定自身。
  5. 父容器 Column 要求第一个子元素 Text 测量自身。
  6. 由于 Text 是叶子节点能确定自身的尺寸和摆放并上报。
  7. 父容器 Column 要求第二个子元素 Text 测量自身。
  8. 由于 Text 是叶子节点能确定自身的尺寸和摆放并上报。
  9. 父容器 Column 所有子元素都测量摆放完毕,可以确定自身的尺寸和摆放并上报。
  10. 根节点 Row 所有子元素都测量摆放完毕,可以确定自身的尺寸和摆放。

Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制),Compose,android

2.3 绘制阶段 Drawing

同样地,UI树会自顶向下地遍历,每个节点依次在屏幕上绘制自身。首先Row会绘制它自己的内容如背景。然后 Image 绘制自身,再之后到分支节点Column,Column的第一个Text,Column的第二个Text。

Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制),Compose,android

三、Modifier

使用 Modifier 可以更改外观,当链式调用 Modifier 的时候会层层包裹前一个 Modifier 最里层是 Layout Node,详见:Modifier。

Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制),Compose,android文章来源地址https://www.toymoban.com/news/detail-830512.html

到了这里,关于Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • element-UI Pagination 分页 布局,自定义布局

    分页左右布局,自定义布局 elm 分页默认布局是 左对齐的 我们这节要实现的效果是这样 (主要是拆分 分页每个一项) 两端对齐用的比较多 或者这样 直接上代码 主要通过 loyout 属性 如果你想要图2上的布局如上代码 你想要左中右布局图三效果 你需要用三个 el-pagination 只需要指

    2024年02月16日
    浏览(42)
  • 鸿蒙开发-UI-图形-绘制自定义图形

    鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 鸿蒙开发-UI-页面路由 鸿蒙开发-UI-组件导航-Navigation 鸿蒙开发-UI-组件导航-Tabs 鸿蒙开发-UI-图形-图片 鸿蒙开发-UI-图形-绘制几何图形 文章目录 前言 一、使用画布组件绘制自定义图形 1.初始化画布组

    2024年04月15日
    浏览(33)
  • HarmonyOS鸿蒙基于Java开发: Java UI 自定义布局

    当Java UI框架提供的布局无法满足需求时,可以创建自定义布局,根据需求自定义布局规则。 Component类相关接口  表1  Component类相关接口 接口名称 作用 setEstimateSizeListener 设置测量组件的侦听器 setEstimatedSize 设置测量的宽度和高度 onEstimateSize 测量组件的大小以确定宽度和高度

    2024年02月19日
    浏览(51)
  • HarmonyOS学习路之开发篇—Java UI框架(自定义组件与布局 一)

    HarmonyOS提供了一套复杂且强大的Java UI框架,其中Component提供内容显示,是界面中所有组件的基类。ComponentContainer作为容器容纳Component或ComponentContainer对象,并对它们进行布局。 Java UI框架也提供了一部分Component和ComponentContainer的具体子类,即常用的组件(比如:Text、Button、

    2024年02月09日
    浏览(37)
  • vue+element ui完成头像上传功能(文件转base64)以及自定义布局。

    1、自定义布局       查阅element ui的头像上传功能,发现是点击头像位置才可以上传,那我们可不可以点击头像外部的按钮来上传头像呢? element ui效果图 :                                                    目标效果 :                            在实现

    2024年01月18日
    浏览(43)
  • Compose 是如何将数据转换成 UI 的?

    Compose 是一个声明式的 UI 框架,提供了很多开箱即用的组件,比如 Text()、Button、Image() 等等,Compose 会经过几个不同的阶段,最终渲染出 UI 界面。 此转换过程分为 【三个阶段】 : 组合: 显示什么 布局: 放在哪里 绘制: 如何渲染 这三个阶段是逐一执行的,流程如下: 在

    2024年02月20日
    浏览(30)
  • Android Compose 新闻App(三)网络数据Compose UI显示加载、Room和DataStore使用

    正文 =============================================================== 后面的内容涉及到样式布局组件,内容比较多。 一、样式 在这里我们先进行样式的配置,打开ui.theme文件夹。 首先是修改Color.kt文件 val Blue200 = Color(0xFF979FF2) val Blue300 = Color(0xFF6D7DEA) val Blue700 = Color(0xFF0068C2) val Blue800 = Col

    2024年04月09日
    浏览(73)
  • 使用自定义数据绘制脑地形矩阵图

    最近做数据处理,想画点自己想要的图,但是找遍了各种库,都没有一个函数可以实现我想要的效果,所以关机时刻还得靠自己啊,自己动手丰衣足食,记录一下实现过程,方便以后查阅。 对于处理后的数据我想实现下图所示的效果,以矩阵的形式排列脑电地形图,并且我想

    2024年02月15日
    浏览(31)
  • compose--初入compose、资源获取、标准控件与布局

    compose正式发布已经一年多了,越来越多的开发人员选择使用它, 声明式UI 也是未来的一个主流趋势,本人也是一年前学习后,并没有真正的使用,所以本着边学习,边分享的心态,准备写个compose系列的文章 首先compose目前只支持 kotlin ,基于google对移动端的鸿图,未来应该也

    2024年02月09日
    浏览(40)
  • 【Vue2+Element ui通用后台】整体布局、数据展示、axios封装

    我们新建 Home 组件来展示右侧的内容 整体布局我们使用layout布局,通过基础的 24 分栏,迅速简便地创建布局。由于左侧占比较小,我们分为 8 和 16 即可 然后每个卡片样式的部分,我们使用 Card 卡片 我们先增加一个个人信息的展示: 然后在App.vue 中给 p 标签去掉默认样式 在

    2024年02月14日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包