Compose Animation
最近更新时间 | 当前稳定版 | 下一候选版本 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2021 年 1 月 28 日 | - | - | - | 1.0.0-alpha11 |
结构
Compose 由 androidx
中的 6 个 Maven 组 ID 构成。每个组都包含一套特定用途的功能,并各有专属的版本说明。
下表介绍了各个组及指向其版本说明的链接。
组 | 说明 |
---|---|
compose.animation | 在 Jetpack Compose 应用中构建动画,丰富用户的体验。 |
compose.compiler | 借助 Kotlin 编译器插件,转换 @Composable functions(可组合函数)并启用优化功能。 |
compose.foundation | 使用现成可用的构建块编写 Jetpack Compose 应用,还可扩展 Foundation 以构建您自己的设计系统元素。 |
compose.material | 使用现成可用的 Material Design 组件构建 Jetpack Compose UI。这是更高层级的 Compose 入口点,旨在提供与 www.material.io 上描述的组件一致的组件。 |
compose.runtime | Compose 的编程模型和状态管理的基本构建块,以及 Compose 编译器插件针对的核心运行时。 |
compose.ui | 与设备互动所需的 Compose UI 的基本组件,包括布局、绘图和输入。 |
声明依赖项
如需添加 Compose 的依赖项,您必须将 Google Maven 代码库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库。
在应用或模块的 build.gradle
文件中添加所需工件的依赖项:
dependencies { implementation "androidx.compose.animation:animation:1.0.0-alpha12" } android { buildFeatures { compose true } composeOptions { kotlinCompilerVersion "1.4.30" kotlinCompilerExtensionVersion "1.0.0-alpha12" } } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { jvmTarget = "1.8" freeCompilerArgs += ["-Xallow-jvm-ir-dependencies"] } }
如需详细了解依赖项,请参阅添加构建依赖项。
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对库的改进有某些建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
版本 1.0.0
版本 1.0.0-alpha11
2021 年 1 月 28 日
发布了 androidx.compose.animation:animation:1.0.0-alpha11
和 androidx.compose.animation:animation-core:1.0.0-alpha11
。版本 1.0.0-alpha11 中包含这些提交内容。
API 变更
- 基于 TransitionDefinition 的 Transition 已弃用 (I0ac57)
- 为要在工具中显示的 Transition 和子动画添加了一个标签字段 (I619fb)
- animateAsState 现为 animateFooAsState,其中 Foo 是添加动画效果的变量的类型。例如 Float、Dp、Offset 等 (Ie7e25)
- 新增可运行任意数量子动画的 InfiniteTransition。(I1da81)
- 更改了 Material 有状态参数接口,以使用返回
State<T>
的 @Composable 函数。添加了 Animatable.asState(),以便更轻松地将 Animatable 转换为 State。还更改了 animateElevation,使其成为 Animatable 上的挂起扩展函数。(If613c)
问题修复
- onCommit、onDispose 和 onActive 已弃用,取而代之的是 SideEffect API 和 DisposableEffect API (If760e)
- 现在支持 updateTransition 中的初始 State (Ifd51d)
- 向 Image 和 Icon 添加了内容说明参数,用于提供对无障碍服务的说明 (I2ac4c)
- invalidate 和 compositionReference() 现已弃用,取而代之的分别是 currentRecomposeScope 和 rememberCompositionReference。(I583a8)
- Duration 和 Uptime 将替换为 Long 毫秒值,此步骤移除了指针输入对这些类的依赖。(Ia33b2、b/175142755、b/177420019)
- 现在可以在组合之外创建可点击项、可切换项和可选择项(I0a130、b/172938345、b/175294473)
- 加/减速选项已更改为功能接口 (Ib14e5)
- 为 LazyColumn/LazyRow/LazyVerticalGrid 的作用域新增了
items(count: Int)
工厂方法。items(items: List)
和itemsIndexed(items: List)
现在是扩展函数,因此您必须在使用时将其手动导入。为 Array 新增了扩展函数重载:items(items: Array) 和 itemsIndexed(Array)(I803fc、b/175562574) - 在测试中使用 TestCoroutineDispatcher (I532b6)
- 移除了 PointerInputData 并修改了 PointerInputChange,以为其指定 PointerInputData 的所有字段。已将 PointerInputEvent 和 PointerInputEventData 变为内部类,因为它们未用于任何公共 API 中。(Ifff97、b/175142755)
版本 1.0.0-alpha10
2021 年 1 月 13 日
发布了 androidx.compose.animation:animation:1.0.0-alpha10
和 androidx.compose.animation:animation-core:1.0.0-alpha10
。版本 1.0.0-alpha10 中包含这些提交内容。
API 变更
- 修改了 Velocity,现在包含分量部分和数学运算。(Ib0447)
@ExperimentalTesting
已重命名为@ExperimentalTestApi
,以便与类似的实验性 API 注解保持一致(Ia4502、b/1714464963)- Position 已重命名为 DpOffset,并移除了 getDistance() (Ib2dfd)
- 移除了 Any.identityHashCode() 公共 API (I2525d7)
问题修复
- 新增了基于协程的 API
Animatable
,用于确保其动画间的互斥性。新增了 DecayAnimationSpec,用于支持多维衰减动画(I820f2、b/168014930) animate()
现已替换为animateAsState()
,后者会返回State<T>
而不是T
。这样可以提高性能,因为失效范围可缩小到读取 State 值的位置。(Ib179e)
版本 1.0.0-alpha09
2020 年 12 月 16 日
发布了 androidx.compose.animation:animation:1.0.0-alpha09
和 androidx.compose.animation:animation-core:1.0.0-alpha09
。版本 1.0.0-alpha09 中包含这些提交内容。
API 变更
- 将 Dp.VectorConverter、Position.VectorConverter 等移到了 animation-core,并弃用了旧的 VectorConveter (If0c4b)
- 引入了一组全新的 Transition API,这些 API 可提升易用性并支持动态添加的动画和动态计算的动画目标。为了方便与基于 TransitionDefinition 的 API 区分开来,我们将这一组 API 标记为实验性。(Ia7fe3)
问题修复
- 现在,offset 修饰符中的 lambda 会返回 IntOffset(而非 Float)。(Ic9ee5、b/174137212、b/174146755)
- 弃用了 LazyColumnFor、LazyRowFor、LazyColumnForIndexed 和 LazyRowForIndexed,改为使用 LazyColumn 和 LazyRow (I5b48c)
- 针对挂起指针输入 API,已将 HandlePointerInputScope 重命名为 AwaitPointerEventScope,并将 handlePointerInput() 重命名为 awaitPointerEventScope()。(Idf0a1、b/175142755)
- 新增了用于创建 InfiniteRepeatableSpec 的 infiniteRepeatable 函数 (I668e5)
- 移除了 ExperimentalPointerInput 注解 (Ia7a24)
版本 1.0.0-alpha08
2020 年 12 月 2 日
发布了 androidx.compose.animation:animation:1.0.0-alpha08
和 androidx.compose.animation:animation-core:1.0.0-alpha08
。版本 1.0.0-alpha08 中包含这些提交内容。
API 变更
- 增加了针对可组合 lambda 参数命名和位置的 lint 检查,旨在检查其命名和位置是否符合 Compose 准则。此外,根据 lint 检查结果和指南,还将一些尾随 lambda 名为
children
的 API 迁移到了content
。(Iec48e) - 移除了之前已弃用的 API:
- 移除了
Modifier.onPositioned
,请使用Modifier.onGloballyPositioned
。 - 移除了
Modifier.onDraw
,请使用Modifier.onDrawBehind
。 - 移除了
Modifier.plus
,请使用Modifier.then
。 - 移除了
Color.Unset
,请使用Color.Unspecified
。 - 移除了
PxBounds
类,请改用Rect
。 - (Ie9d02、b/172562222)
- 移除了
- 暂时添加了相应选项,让 TestAnimationClock 可由 MonotonicFrameClock 驱动(I1403b、b/173402197)
问题修复
- 已将 Modifier.drawLayer 重命名为 Modifier.graphicsLayer。此外,还根据 API 委员会反馈将相关类更新为了 GraphicsLayer。(I0bd29、b/173834241)
- 添加了 Modifier.scale/rotate API 作为 drawLayer 的便捷 API。
- Modifier.drawOpacity 已重命名为 Modifier.alpha
- Modifier.drawShadow 已重命名为 Modifier.shadow(I264ca、b/173208140)
- 将 PointerInputData 的 uptime 字段和 position 字段设为了不可为 null。(Id468a)
- 已将 offsetPx 修饰符重命名为 offset。现在,它们采用 lambda 参数(而非 State)。(Ic3021、b/173594846)
- 添加了用于在协程中运行动画的新 API (Ied662)
- 弃用了名称后缀为
Ambient
的 Ambient 属性,将它们替换成了以 Ambient 为前缀的新属性(以与其他 Ambient 属性保持一致并遵循 Compose API 准则)。(I33440) - 现在,测试中的时间控件(TestAnimationClock 及其用例)处于实验阶段(I6ef86、b/17137521)
- 移除了旧的 ui-test 模块及其桩 (I3a7cb)
RestorableStateHolder.withRestorableState
函数已重命名为RestorableStateProvider
(I66640)- Alignment 接口经过了更新,可正常工作。(I46a07、b/172311734)
版本 1.0.0-alpha07
2020 年 11 月 11 日
发布了 androidx.compose.animation:animation:1.0.0-alpha07
和 androidx.compose.animation:animation-core:1.0.0-alpha07
。版本 1.0.0-alpha07 中包含这些提交内容。
问题修复
- 弃用了 Foundation AmbientTextStyle、ProvideTextStyle 和 AmbientContentColor,请改为使用 Material 库中提供的新版本。对于非 Material 应用,您应改为创建自己的设计系统专属主题上下文环境,以便在您自己的组件中使用。(I74acc、b/172067770)
- 弃用了 foundation.Text,取而代之的是 material.Text。如需了解不使用来自主题的值的“非预设立场型”基本文本 API,请参阅 androidx.compose.foundation.BasicText。(If64cb)
- 已将 MeasureResult 从 MeasureScope 中移出。(Ibf96d、b/171184002)
- 已将几个与布局相关的符号从 androidx.compose.ui 移至 androidx.compose.layout.ui。(I0fa98、b/170475424)
版本 1.0.0-alpha06
2020 年 10 月 28 日
发布了 androidx.compose.animation:animation:1.0.0-alpha06
和 androidx.compose.animation:animation-core:1.0.0-alpha06
。版本 1.0.0-alpha06 中包含这些提交内容。
API 变更
- 在 ComposeTestRule 中启用了过渡;从 ComposeTestRule 中移除了用于启用闪烁光标的选项。(If0de3)
版本 1.0.0-alpha05
2020 年 10 月 14 日
发布了 androidx.compose.animation:animation:1.0.0-alpha05
和 androidx.compose.animation:animation-core:1.0.0-alpha05
。版本 1.0.0-alpha05 中包含这些提交内容。
API 变更
- 新增了 Animation 接口和子类:这些类存储动画的开始和结束条件,因此仅支持通过播放时间查询值和速度(Ie95bd、b/163329867)
问题修复
- 将 OnPositionedModifier 重命名为 OnGloballyPositionedModifier,并将 onPositioned() 重命名为 onGloballyPositioned()。(I587e8、b/169083903)
弃用了 contentColor() 和 currentTextStyle() API,并分别以 AmbientContentColor 和 AmbientTextStyle Ambient 取而代之。与其他任何 Ambient 一样,您可以通过在 Ambient 属性中使用
.current
来访问当前值。进行此项变更是为了确保一致性,并避免可以通过多种方式来实现同一目的。此外,还重命名了一些 Ambient 属性,以更准确地描述它们的用途,如下所示:- ContentColorAmbient -> AmbientContentColor
- TextStyleAmbient -> AmbientTextStyle
- IndicationAmbient -> AmbientIndication
- EmphasisAmbient -> AmbientEmphasisLevels
- RippleThemeAmbient -> AmbientRippleTheme (I37b6d)
版本 1.0.0-alpha04
2020 年 10 月 1 日
发布了 androidx.compose.animation:animation:1.0.0-alpha04
和 androidx.compose.animation:animation-core:1.0.0-alpha04
。版本 1.0.0-alpha04 中包含这些提交内容。
API 变更
- 使用 @VisibleForTesting 对 rootAnimationClockFactory、transitionsEnabled、blinkingCursorEnabled 和 textInputServiceFactory 进行了注解,使这些 API 变为内部 API 并隐藏其 KDoc(I554eb、b/168308412)
问题修复
- 更新了多个图形 API
- 更新了缩放和旋转的转换 API,现在使用单个 Offset 参数来表示数据透视坐标,不再对 DrawScope 和 DrawTransform 中的 x/y 坐标使用单独的浮点数参数
- 移除了 Rect.expandToInclude 和 Rect.join 方法
- 更新了 Radius 文档,除了介绍 elliptical(椭圆形)之外,还介绍了 oval(卵形)
- 添加了相关文档,指明不能直接调用内联 Radius 类的公共构造函数,而应通过对应的函数构造函数对 Radius 对象进行实例化
- 移除了用于查询 topRight、bottomRight、bottomCenter 等的 RoundRect API
- 弃用了 Rect.shift,改为使用 Rect.translate
- 移除了 RoundRect.grow API 和 Rect.shrink API
- RoundRect.outerRect 已重命名为 Rect.boundingRect
- 移除了 RoundRect.middleRect/tallMiddleRect/wideMiddleRect 和 Rect.isStadium 方法
- RoundRect.longestSide 已重命名为 RoundRect.maxDimension
- RoundRect.shortestSide 已重命名为 RoundRect.minDimension
- 已将 RoundRect.center 从函数变为属性
- 更新了 RoundRect 构造函数,现在使用 Radius 属性,不再使用针对 x/y 半径值的单独参数
- 移除了假定对象是原点为 0,0 的 Rectangle 的 Size API
- 在 Radius 中添加了一个销毁 API
- 已改为将各种 RoundRect 扩展函数迁移为属性
- (I8f5c7、b/168762961)
- 弃用了 foundation.Box。请改用 foundation.layout.Box。(Ie5950、b/167680279)
- Stack 已重命名为 Box。将弃用之前存在的 Box,改为使用 compose.foundation.layout 中的新 Box。新的 Box 会在存在多个子元素时,在堆栈中将一个子元素放在另一个子元素之上,其行为不同于旧版 Box,后者的行为类似于 Column。(I94893、b/167680279)
- 弃用了 Box 装饰参数。如果您想对框进行装饰/填充,请改为使用 Modifier(Modifier.background、Modifier.border、Modifier.padding)(Ibae92、b/167680279)
- 我们已阻止静态导入布局作用域的内容(例如:RowScope 中的 alignWithSiblings),请改用显式作用域替代项:
with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) }
。(I216be、b/166760797)
版本 1.0.0-alpha03
2020 年 9 月 16 日
发布了 androidx.compose.animation:animation:1.0.0-alpha03
和 androidx.compose.animation:animation-core:1.0.0-alpha03
。版本 1.0.0-alpha03 中包含这些提交内容。
问题修复
- gravity 在布局 API 中用到时被一致地重命名为 align 或 alignment。(I2421a、b/164077038)
版本 1.0.0-alpha02
2020 年 9 月 2 日
发布了 androidx.compose.animation:animation:1.0.0-alpha02
和 androidx.compose.animation:animation-core:1.0.0-alpha02
。版本 1.0.0-alpha02 中包含这些提交内容。
API 变更
添加了
ManualFrameClock.hasAwaiters
,用于检查是否有任何内容在等待来自相应时钟的帧;在运行需要 ManualFrameClock 的测试时,runWithManualClock
可用于替代runBlocking
;TestUiDispatcher.Main
可让您轻松访问测试中的主界面调度程序。例如:
@Test fun myTest() = runWithManualClock { clock -> // set some compose content withContext(TestUiDispatcher.Main) { clock.advanceClock(1000L) } if (clock.hasAwaiters) { println("The clock has awaiters") } else { println("The clock has no more awaiters") } }
问题修复
弃用了 onPreCommit;onCommit 的功用现在与 onPreCommit 相同。
现在,onCommit 和 onActive 在已提交的组成部分变更的同一 Choreographer 帧中运行,而不是在下一个 Choreographer 帧开始处运行。(I70403)
版本 1.0.0-alpha01
2020 年 8 月 26 日
发布了 androidx.compose.animation:animation:1.0.0-alpha01
和 androidx.compose.animation:animation-core:1.0.0-alpha01
。版本 1.0.0-alpha01 中包含这些提交内容。
版本 0.1.0-dev
版本 0.1.0-dev17
2020 年 8 月 19 日
发布了 androidx.compose.animation:animation:0.1.0-dev17
和 androidx.compose.animation:animation-core:0.1.0-dev17
。版本 0.1.0-dev17 中包含这些提交内容。
新功能
API 变更
- Offset 已成为内联类 (Iaec70)
- IntOffset 现已成为内联类 (Iac0bf)
- IntSize 现已成为内联类 (I2bf42)
AnimatedVisibilty 可组合项可为子项内容的出现和消失添加动画效果。
引入了 EnterTransition 和 ExitTransition,用于与 AnimatedVisibilty 可组合项结合使用,以提供 3 种不同类型的出现和消失动画:淡入淡出、滑动和展开/收缩内容。将不同类型的动画结合使用,可以实现定制程度更高的外观和风格。(Idda11)
弃用了 PxBounds,改为使用 Rect。使用 PxBounds 的所有情况都更新为使用 Rect,并添加了适当的弃用/替换注释,以辅助迁移。(I37038、b/162627058)
问题修复
PlacementScope.placeAbsolute()
已重命名为PlacementScope.place()
,以前的PlacementScope.place()
已重命名为PlacementScope.placeRelative()
。因此,PlacementScope.place()
方法将不再自动在从右到左的上下文中镜像位置。如果需要执行此镜像,请改用PlacementScope.placeRelative()
。(I873ac、b/162916675)- 为清楚起见,现在弃用了
state { ... }
可组合项,改为对remember { mutableStateOf(...) }
的显式调用。这样可减少管理状态所需的整体 API Surface 及概念数量,且与类属性委托的by mutableStateOf()
模式相一致。(Ia5727)
版本 0.1.0-dev16
2020 年 8 月 5 日
发布了 androidx.compose.animation:animation:0.1.0-dev16
和 androidx.compose.animation:animation-core:0.1.0-dev16
。版本 0.1.0-dev16 中包含这些提交内容。
API 变更
- 现在可通过
Foo.VectorConverter
访问用于转换内置单位的内置矢量转换器。例如Dp.VectorConverter
、Color.VectorConverter
、Float.VectorConverter
等 (I3e273) - 支持在
Modifier.animateContentSize()
中使用结束监听器,以便监听器在尺寸有变化的动画播放完毕后能够收到通知,并得知动画的开始/结束尺寸。(I277b2) - 新增了 animateContentSize 修饰符,用于为其子修饰符的布局尺寸变化添加动画效果 (Ieffdc)
添加了
MonotonicFrameAnimationClock
,让您能够将 MonotonicFrameClock 用作AnimationClockObservable
,以消除基于协程的新时钟与仍使用基于回调的旧时钟的 API 之间的差异。现在,
ManualAnimationClock
的MonotonicFrameClock
等效项是ManualFrameClock
。(I111c7、b/161247083)
问题修复
- 更新了 API 对从右到左布局的支持。添加了 LayoutDirectionAmbient,可用于读取和更改布局方向。移除了 Modifier.rtl 和 Modifier.ltr。(I080b3)
- 要求为 transitionDefinition 明确指定类型 T。(I1aded)
- foundation.shape.corner 软件包已扁平化为 foundation.share(I46491、b/161887429)
- 已弃用 Modifier.plus,现在改用 Modifier.then。“Then”能够更明确地指出先后执行顺序,同时还禁止输入会破坏链且降低可读性的
Modifier.padding().background() + anotherModifier
(Iedd58、b/161529964) - Modifier.drawBackground 已重命名为 Modifier.background (I13677)
版本 0.1.0-dev15
2020 年 7 月 22 日
发布了 androidx.compose.animation:animation:0.1.0-dev15
和 androidx.compose.animation:animation-core:0.1.0-dev15
。版本 0.1.0-dev15 中包含这些提交内容。
依赖项
- 如需使用 Compose 的
0.1.0-dev15
版本,您需要根据上面的声明依赖项部分给出的新代码段来更新依赖项。
API 变更
- Transition API 已更改为返回 TransitionState,而不是将 TransitionState 传递给子级。这使该 API 与 animate() API 更加一致。(I24e38)
- 为淡入淡出添加了修饰符参数(I87cfe、b/159706180)
- 在顶级 API 中使用 AnimationSpec 而非 AnimationBuilder 来阐明静态动画规范的概念
- 改进了过渡 DSL:在创建补间动画、弹性动画等 AnimationSpec 时无需再指定 lambda 要求,而是直接接受构造函数参数。
- 提高了 AnimationSpec 的整体易用性:开放构造函数,而不是依赖于构建器
- 将关键帧和补间动画的时长和延迟时间改为了 Int 类型的值。这样就能消除不必要的类型转换和方法重载(同时支持 Long 和 Int 两种数据类型)。(Ica0b4)
- 将使用的 IntPx 替换为了 Int。将 IntPxPosition 替换为了 IntOffset。将 IntPxSize 替换为了 IntSize。(Ib7b44)
- 为了整合用于表示大小信息的类的数量,我们对 Size 类(而非 PxSize)的使用进行了标准化。这样即可获得内联类的优势,即利用一个 long 值封装 2 个浮点数值,用于表示以浮点数表示的宽度和高度。(Ic0191)
- 为了整合用于表示位置信息的类的数量,我们对 Offset 类(而非 PxPosition)的使用进行了标准化。这样即可获得内联类的优势,即利用一个 long 值封装 2 个浮点数值,用于表示以浮点数表示的 x 轴和 y 轴偏移量。(I3ad98)
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I086f4)
- 为 Dp、Px、Size、Position、Bounds、PxPosition、PxSize、PxBounds、IntPx、IntPxSize、IntPxPosition、IntPxBounds 和 AnimationVector 添加了对 animate() 的支持 (Ib7518)
- 淡入淡出现在接受可选的 AnimationBuilder 参数,以允许配置动画 (I6d6e0)
- 将 API 中使用的所有可为 null 的 Color 替换为非 null 值,并使用 Color.Unset 代替 null (Iabaa7)
- 移除了 ValueHolder 类。重构了 AnimatedValue 和 AnimatedFloat 类,使动画值字段抽象化,以便子类可以发现值更新。
- 为 AnimatedValue、AnimatedFloat 等添加了模型类。
- 添加了一组新的轻量级 @Composable API,用于在值之间添加动画。(I79530)
- Ambient API 重大更改。如需了解详情,请参阅日志和
Ambient<T>
文档(I4c7ee、b/143769776) - 新的重复模式:Reverse。当动画在 RepeatableSpec 或 VectorizedRepeatableSpec 中重复时,此模式会返回上一次迭代。(Ibe0f5)
- ManualAnimationClock 增加了 API 内容:
hasObservers: Boolean
和构造函数参数dispatchOnSubscribe: Boolean
(Iaa134) - 添加了 API 以在 AnimatedFloat 中获取最小/最大边界 (Icd9cc)
问题修复
runOnIdleCompose
已重命名为runOnIdle
(I83607)- 多个测试 API 已重命名,变得更为直观。所有 findXYZ API 均已重命名为 onNodeXYZ。所有 doXYZ API 均已重命名为 performXYZ。(I7f164)
- 引入了低级别无状态动画 API。这些 API (I63bf7)
- Recompose 可组合项已不再属于有效抽象。大多数重新组合都应由 MutableState 分配促成。在此之外,建议您使用
invalidate
函数来触发对当前范围的重新组合。(Ifc992) - 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数。删除了整个 Px 类 (I3ff33)
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (Id3434)
- 淡入淡出现在可以将 null 用作初始值(Iad6a4、b/155947711)
- 我们进行了大规模的重构工作,其中包括替换了各种 Compose 类中对 Px 类的使用,从而仅依赖于 Dp 和基元类型来处理像素参数 (I19d02)
- 整合了 CanvasScope 实现,因此现在只有 DrawScope 和 ContentDrawScope。CanvasScope 已重命名为 DrawScope。更新了 DrawScope 以实现密度界面并提供 LayoutDirection。删除了 ContentDrawScope 中的 DrawScope 子类。Painter 和 PainterModifier 已更新,不再由自身保留 RTL 属性,因为 DrawScope 已提供此信息,无需手动提供 (I1798e)
- 更新了公开画布的更高级别的 Compose API,改为公开 CanvasScope。这样一来,用户便无需再维护自己的渲染对象。对于仍需要访问画布的使用方,可以使用 drawCanvas 扩展程序方法,该方法提供回调以向底层画布发出绘制命令。(I80afd)
- 分别向 Row 和 Column 添加了 verticalGravity 和 horizontalGravity 参数。(I7dc5a)
- ui-text 模块已重命名为 ui-text-core (I57dec)
- 改进了 DrawModifier API:
- 确定了 draw() ContentDrawScope 的接收器范围
- 移除了 draw() 上的所有参数
- DrawScope 的接口与之前的 CanvasScope 接口相同
- ContentDrawScope 具有 drawContent() 方法(Ibaced、b/152919067)
runOnIdleCompose
和runOnUiThread
现在是全局函数,而不是 ComposeTestRule 上的方法。(Icbe8f)- [Mutable]State 属性委托运算符移到了扩展程序,以支持 Kotlin 1.4 属性委托优化。调用方必须添加 import 才能继续使用
by state { ... }
或by mutableStateOf(...)
。(I5312c) - 已弃用 ColoredRect,现改用
Box(Modifier.preferredSize(width, height).drawBackground(color))
。(I499fa、b/152753731) - 将修饰符以及运算符替换成了出厂扩展函数 (I225e4)
- 弃用了 Center 可组合项。应使用 LayoutSize.Fill + LayoutAlign.Center 修饰符或应用了适当修饰符的某个 Box 或 Stack 可组合项替换 (Idf5e0)
- LayoutFlexible 已重命名为 LayoutWeight。“tight”参数已重命名为“fill”。(If4738)
- Opacity 可组合函数已替换为 drawOpacity 修饰符。(I5fb62)
- 现在,使用 AndroidComposeTestRule 的测试会在组合根目录处提供一个动画时钟,该时钟可以手动暂停、恢复和快进。(Id54c5)
- 支持 LayoutPadding 修饰符中从右向左的方向 (I9e8da)
- Density 和 DensityScope 合并到了一个接口中。现在,您可以使用 DensityAmbient.current 代替 ambientDensity()。只需 with(density) 便可代替 withDensity(density) (I11cb1)
- 为各种内联类类型添加了复制方法,包括:
- Offset
- Size
- Radius
- Motion
- TransformOrigin
- 弃用了 Size.copy 伴生对象方法,改为使用实例复制方法(Ife290、b/159905651)
- androidx.compose.ViewComposer 移到了 androidx.ui.node.UiComposer。移除了 androidx.compose.Emittable,它与 ComponentNode 重复。移除了 androidx.compose.ViewAdapters,它们不再是受支持的用例。已弃用 Compose.composeInto,请改为使用
setContent
或setViewContent
。已弃用 Compose.disposeComposition,改用setContent
返回的Composition
的dispose
方法。androidx.compose.Compose.subcomposeInto 已移到 androidx.ui.core.subcomposeInto。ComponentNode#emitInsertAt 已重命名为 ComponentNode#insertAt。ComponentNode#emitRemoveAt 已重命名为 ComponentNode#removeAt。ComponentNode#emitMode 已重命名为 ComponentNode#move (Idef00)