
Jetpack Compose
文章平均质量分 96
Jetpack Compose
tmacfrank
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Compose 实践与探索十七 —— 多指手势与自定义触摸反馈
前面我们讲了很多半自动化 API 进行手势识别,那些 API 可以覆盖绝大多数的使用场景。本节我们来介绍,如何通过底层 API 实现完全自定义的触摸算法。原创 2025-03-28 16:43:52 · 1116 阅读 · 0 评论 -
Compose 实践与探索十一 —— ParentDataModifier
)但是这样的话,在实现 modifyParentData() 的具体内容时,你需要去查阅 Box 的父组件 Row 的内部都用到了哪些 parentData,这是一件很麻烦的事情。因此,这种方式不可行。@Stable。原创 2025-03-25 16:08:13 · 1315 阅读 · 0 评论 -
Compose 实践与探索十八 —— Compose 与 View 混用
Compose 发展初期的几年,会是新的模块用 Compose 写,然后逐渐的把老界面从 View 替换成 Compose 组件,直到全部或几乎全部是 Compose 代码的模式。原生的 SurfaceView 与 TextureView 的重点是在它们底层的 Surface API,而不是 View 本身。Compose 并没有给出对等的实现,因此倘若你的项目中用到了它们,就仍需继续使用它们。这也是 View 到 Compose 的迁移到“几乎全部是 Compose 代码”的原因。原创 2025-03-21 23:11:19 · 644 阅读 · 0 评论 -
Compose 实践与探索十六 ——滑动检测与嵌套滑动
这里对以上内容就不再赘述了,直接去讲解更复杂的 Modifier 实现更复杂的触摸反馈效果。在传统的 View 体系中,在自定义触摸反馈的内容时,对于 View 我们通常都是重写它的 onTouchEvent(),对于 ViewGroup 可能还需要重写 onInterceptTouchEvent(),极少数时候会更深入地去重写 dispatchTouchEvent()。原创 2025-03-21 23:09:47 · 1248 阅读 · 0 评论 -
Compose 实践与探索十五 —— 自定义布局
自定义布局在 Compose 中相对于原生的需求已经小了很多,先讲二者在本质上的逻辑,再说它们的使用场景,两相对比就知道为什么 Compose 中的自定义布局的需求较小了。原生是在 xml 布局文件不太方便或者无法满足需求时才会在代码中通过自定义 View 的方式,重写 onMeasure() 或 onLayout(),或添加其他功能方法来实现需求。原创 2025-03-17 23:23:30 · 1332 阅读 · 0 评论 -
Compose 实践与探索十四 —— 自定义绘制
不论是在传统的 View 体系下,还是在 Compose 中,“自定义 View” 都包含视图的测量、布局、绘制、触摸反馈以及动画。说到 Compose 的自定义绘制,Compose 提供了更加上层的 API,相比于原生的绘制 API 会更简单、更直接一些。比如原生的 Canvas 和 Paint 在 Compose 中进行正常绘制时是用不到的,只有在使用原生独有的绘制功能(比如多维旋转)时才需要下沉到原生这一层去使用它们。原创 2025-03-17 23:22:02 · 1576 阅读 · 0 评论 -
Compose 实践与探索十三 —— 附带效应
Google 官方文档对 side effect 有两种翻译,简体中文翻译为附带效应,繁体中文翻译为副作用。本篇文章将全面介绍 Compose 的附带效应 API 的用法以及原理,帮助你区分不同 API 的使用场景。原创 2025-03-16 22:42:47 · 884 阅读 · 0 评论 -
Compose 实践与探索十二 —— 其他 Modifier
addBeforeLayoutModifier() 与 addAfterLayoutModifier() 并不是指在 Modifier 链上先处理哪个或者后处理哪个具体的 Modifier,而是指同一个 Modifier 具有多重“身份”时,先/后处理哪个“身份”。原创 2025-03-16 22:40:44 · 678 阅读 · 0 评论 -
Compose 实践与探索十 —— PointerInputModifier 与 SemanticsModifier
作用:ParentDataModifier 用于给子组件附加一些属性,让父组件可以利用用法:只有在通过 Layout() 写自定义函数时才会用到 ParentDataModifier,在测量与布局的算法中通过 Measurable 的 parentData 属性拿到这个数据后根据具体需求使用即可,最后要提供一个 Modifier 函数实现 ParentDataModifier,在 modifyParentData() 中根据需求提供附加数据。原创 2025-03-15 23:04:30 · 818 阅读 · 0 评论 -
Compose 实践与探索九 —— DrawModifier 解析
每个 LayoutNodeWrapper 中的 entities 数组中的 DrawModifier 是伪造的,要不写在 Box() 的示例代码中会很占篇幅。LayoutNode 的 draw() 调用 outerLayoutNodeWrapper,也就是 LayoutNodeWrapper,在上面的层级图中的 ModifiedLayoutNode1 的 draw() 开始绘制。原创 2025-03-15 23:02:22 · 932 阅读 · 0 评论 -
Compose 实践与探索八 —— LayoutModifier 解析
前面几节讲的 Modifier 都是起辅助作用的,比如 Modifier 的伴生对象、CombinedModifier、 ComposedModifier 以及几乎所有 Modifier 的父接口 Modifier.Element。本篇我们开始讲具有直接功效的 Modifier,分为几个大类:LayoutModifier、DrawModifier 等。原创 2025-03-14 22:38:19 · 1168 阅读 · 0 评论 -
Compose 实践与探索七 —— Modifier 基础
从本篇文章开始我们要讲解 Modifier 修饰符,它是一个很精妙的东西,允许我们通过链式调用的方式为组件应用一系列的样式设置,如边距、字体、位移等。在 Compose 中,每个基础的 Composable 组件都有一个 modifier 参数,通过传入自定义的 Modifier 修改组件的样式。此外,前面我们还提过 Modifier 调用链对顺序敏感,不同的调用顺序会产生不同的 Modifier 链从而影响最终的 UI 效果,这是 Compose 按照 Modifier 链来顺序完成页面布局与绘制的结原创 2025-03-14 22:35:32 · 976 阅读 · 0 评论 -
Compose 实践与探索六 —— Transition 及其关联 API
本篇是动画的最后一篇,我们先介绍 Transition API,然后再介绍与 Transition 相关的三个上层 API:AnimatedVisibility()、Crossfade()、AnimatedContent()。原创 2025-03-13 23:29:16 · 1041 阅读 · 0 评论 -
Compose 实践与探索五 —— 动画进阶
介绍 Compose 动画的各种 AnimationSpec。原创 2025-03-13 23:23:43 · 894 阅读 · 0 评论 -
Compose 实践与探索四 —— 单值动画
现在在 Android 开发领域说的动画几乎就是属性动画。这节以 animateDpAsState() 为代表,介绍 animateXxxAsState() 这一系列函数。animateDpAsState() 已经包含了 mutableStateOf() 这种数据改变通知监听者的功能,同时还包含 remember() 防止多次初始化的功能,因此创建动画属性就不用 remember() 和 mutableStateOf() 了。原创 2025-03-11 03:23:38 · 1572 阅读 · 0 评论 -
Compose 实践与探索三 —— 深入理解重组
CompositionLocal 按照字面意思可直译为 Composition 的局部变量。User(name)name 变量只在 setContent() 后的代码块内有效,并且不能穿透到代码块调用的 User 函数之内。User()// 这里会报错的,User 函数的内部访问不到 name 变量Text(name)Compose 提供的 CompositionLocal 可以帮助我们突破这个限制,让通过 CompositionLocal 创建的局部变量具备穿透函数的能力。原创 2025-03-11 03:20:29 · 798 阅读 · 0 评论 -
Compose 实践与探索二 —— 状态订阅与自动更新
Compose 官方称其是无状态的(Stateless),这个状态是指组件属性。比如说 TextView 内保存的文字内容就是一个状态,你可以通过 getText() 与 setText() 获取与设置文字。但在 Compose 中,组件没有状态,也就是其内部不会保存这些数据,在将数据设置到 UI 上之后,它们就被“扔掉了”。但需要注意的是,无状态作为 Compose 的一个特点,它是允许组件无状态,而不是说组件绝对没有状态。原创 2025-03-10 22:45:36 · 1392 阅读 · 0 评论 -
Compose 实践与探索一 —— 关键知识与概念详解
本节主要概括性地介绍 Jetpack Compose 中的关键概念。原创 2025-03-10 22:41:40 · 1106 阅读 · 0 评论 -
Compose 的集成与导航
首先我们来看如何在 View 体系中集成 Compose。原创 2025-01-13 23:59:45 · 1374 阅读 · 0 评论 -
Jetpack Compose 学习笔记(四)—— CompositionLocal 与主题
Jetpack Compose 的主题是基于 Material Design 的,需要先了解一下。使用 Material Theme 就可以获取到 Material Design 的设计元素,如想使用其他设计风格需要自己定义主题。颜色:定义了许多语义命名的颜色,可在整个应用程序中使用。如 Color Scheme、Primary、Secondary 和 On Primary。原创 2025-01-04 23:08:00 · 898 阅读 · 0 评论 -
Jetpack Compose 学习笔记(三)—— 状态
在科学技术中,状态指物质系统所处的状况,也指各种聚集态,如物质的固、液、气等态。当系统的温度、压力、体积、物态、物质的量、各种能量等等一定时,我们就说系统处于一个状态(state)。应用中的状态是指可以随时间变化的任何值,这是一个宽泛定义,从 Room 数据库到类的变量,全部涵盖在内。所有 Android 应用都会向用户显示状态。在无法建立网络连接时显示的信息提示控件(Toast 等)博文和相关评论在用户点击按钮时播放的波纹动画用户可以在图片上绘制的贴纸。原创 2025-01-04 23:04:10 · 1273 阅读 · 0 评论 -
Jetpack Compose 学习笔记(二)—— 布局
自定义版式。在 Compose 中,界面元素由可组合函数表示,此类函数在被调用后会发出一部分界面,这部分界面随后会被添加到呈现在屏幕上的界面树中。每个界面元素都有一个父元素,还可能有多个子元素。此外,每个元素在其父元素中都有一个位置,指定为 (x, y) 位置;也都有一个尺寸,指定为width和height。在界面树中布置每个节点的过程分为三个步骤。测量所有子项确定自己的尺寸放置其子项注意:Compose 界面不允许多遍测量。这意味着,布局元素不能为了尝试不同的测量配置而多次测量任何子元素。原创 2025-01-03 22:10:31 · 1195 阅读 · 0 评论 -
Jetpack Compose 学习笔记(一)—— 快速上手
本篇主要是对 Jetpack Compose 有一个宏观上的了解。原创 2025-01-03 22:06:59 · 1146 阅读 · 0 评论