Compose Animation

在 Jetpack Compose 应用中构建动画,丰富用户的体验。
最近更新时间 当前稳定版 下一候选版 Beta 版 Alpha 版
2021 年 8 月 4 日 1.0.1 - - 1.1.0-alpha01

结构

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.runtimeCompose 的编程模型和状态管理的基本构建块,以及 Compose 编译器插件针对的核心运行时。
compose.ui与设备互动所需的 Compose UI 的基本组件,包括布局、绘图和输入。

声明依赖项

如需添加 Compose 的依赖项,您必须将 Google Maven 代码库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库

在应用或模块的 build.gradle 文件中添加所需工件的依赖项:

Groovy

dependencies {
    implementation "androidx.compose.animation:animation:1.1.0-alpha03"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.1.0-alpha03"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.animation:animation:1.1.0-alpha03")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.1.0-alpha03"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

如需详细了解依赖项,请参阅添加 build 依赖项

反馈

您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库的改进有自己的见解,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。

创建新问题

如需了解详情,请参阅问题跟踪器文档

版本 1.1.0

版本 1.1.0-alpha01

2021 年 8 月 4 日

发布了 androidx.compose.animation:animation:1.1.0-alpha01androidx.compose.animation:animation-core:1.1.0-alpha01androidx.compose.animation:animation-graphics:1.1.0-alpha01版本 1.1.0-alpha01 中包含这些提交内容

API 变更

  • AnimatedImageVector 和相关 API 现在位于新的 androidx.compose.animation:animation-graphics 模块中。(I60873)

bug 修复

版本 1.0.1

版本 1.0.1

2021 年 8 月 4 日

发布了 androidx.compose.animation:animation:1.0.1androidx.compose.animation:animation-core:1.0.1版本 1.0.1 中包含这些提交内容

依赖项更新

  • 更新为依赖于 Kotlin 1.5.21

版本 1.0.0

版本 1.0.0

2021 年 7 月 28 日

发布了 androidx.compose.animation:animation:1.0.0androidx.compose.animation:animation-core:1.0.0版本 1.0.0 中包含这些提交内容

1.0.0 的主要功能

这是 Compose 的第一个稳定版本。如需了解详情,请参阅官方 Compose 版本发布博客

已知问题

  • 如果您使用的是 Android Studio Bumblebee Canary 4 或 AGP 7.1.0-alpha04/7.1.0-alpha05,可能会遇到以下崩溃问题:

      java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
    

    如需修复此崩溃问题,请暂时将 build.gradle 文件中的 minSdkVersion 提高到 24 及以上。此问题将在下一个版本的 Android Studio Bumblebee 和 AGP 7.1 中修复。(b/194289155)

版本 1.0.0-rc02

2021 年 7 月 14 日

发布了 androidx.compose.animation:animation:1.0.0-rc02androidx.compose.animation:animation-core:1.0.0-rc02版本 1.0.0-rc02 中包含这些提交内容

版本 1.0.0-rc01

2021 年 7 月 1 日

发布了 androidx.compose.animation:animation:1.0.0-rc01androidx.compose.animation:animation-core:1.0.0-rc01版本 1.0.0-rc01 中包含这些提交内容

bug 修复

  • InfiniteAnimationPolicy 移到了 androidx.compose.ui:uiI5eb09b/160602714

版本 1.0.0-beta09

2021 年 6 月 16 日

发布了 androidx.compose.animation:animation:1.0.0-beta09androidx.compose.animation:animation-core:1.0.0-beta09版本 1.0.0-beta09 中包含这些提交内容

API 变更

  • 新增了 AnimatedContent 可组合项。在进入新目标内容并退出初始内容的过渡过程中,该可组合项使用可自定义的 ContentTransform 来管理其内容变化。您可以使用进入过渡和退出过渡的不同组合来自定义所需的外观和风格。作为内容转换的一部分,AnimatedContent 会根据收到的内容自动调整动画内容的大小。(I2c3df)
  • 移除了 ManualFrameClock。如果您需要控制动画,请改用 composeTestRule.mainClock。(I3c3e8b/189951065

添加了配置文件规则

此版本向以下 Compose 模块添加了配置文件规则 (I14ed6):

  • androidx.compose.animation
  • androidx.compose.animation-core
  • androidx.compose.foundation
  • androidx.compose.foundation-layout
  • androidx.compose.material
  • androidx.compose.material-ripple
  • androidx.compose.runtime
  • androidx.compose.ui
  • androidx.compose.ui.geometry
  • androidx.compose.ui.graphics
  • androidx.compose.ui.text
  • androidx.compose.ui.text
  • androidx.compose.ui.unit
  • androidx.compose.ui.util

什么是配置文件规则?

  • 库的配置文件规则是在位于 src/main 或等效目录内的文本文件 baseline-prof.txt 中指定的。该文件在每行中指定一个规则,在此情况下,规则是指用于与库中的方法或类匹配的格式。这些规则的语法是使用 adb shell profman --dump-classes-and-methods ... 时所用的便于用户看懂的 ART 配置文件格式的超集。这些规则采用两种形式,一种用于方法,一种用于类。

  • 方法规则采用以下格式:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • 类规则采用以下格式:

    <CLASS_DESCRIPTOR>
    
  • 其中,<FLAGS>HSP 中的一个或多个字符,用于指示相应方法应标记为“Hot”、“Startup”还是“Post Startup”。

  • <CLASS_DESCRIPTOR> 是目标方法所属类的描述符。例如,类 androidx.compose.runtime.SlotTable 的描述符为 Landroidx/compose/runtime/SlotTable;

  • <METHOD_SIGNATURE> 是方法的签名,其中包含方法的名称、参数类型和返回值类型。例如,LayoutNode 中的 fun isPlaced(): Boolean 方法具有签名 isPlaced()Z

  • 这些格式可以包含通配符(***?),以便让单个规则能够涵盖多个方法或类。

规则的作用是什么?

  • 如果某个方法具有 H 标志,则表示该方法为“hot”方法,应提前进行编译。

  • 如果某个方法具有 S 标志,则表示系统会在启动时调用该方法,应提前进行编译,以避免在启动时耗费资源进行编译以及解析该方法。

  • 如果某个方法具有 P 标志,则表示系统会在启动后调用该方法。

  • 如果某个类出现在此文件中,则表示系统会在启动过程中使用该类,应在堆中预先分配该类,以避免耗费资源来加载类。

运作方式是怎样的?

  • 库可以定义要打包到 AAR 工件中的那些规则。如果事后构建了某个应用,并且其中包含这些工件,则系统会将这些规则合并在一起,并使用合并后的规则来构建特定于该应用的紧凑二进制 ART 配置文件。然后,当设备安装该应用后,ART 就可以利用此配置文件来预先编译应用的特定部分,从而提升应用性能,特别是首次运行时的性能。请注意,这对可调试应用没有任何影响。

版本 1.0.0-beta08

2021 年 6 月 2 日

发布了 androidx.compose.animation:animation:1.0.0-beta08androidx.compose.animation:animation-core:1.0.0-beta08版本 1.0.0-beta08 中包含这些提交内容

bug 修复

  • 现在,detectDragGesuresdetectVerticalGesturesdetectHorizontalGestures 将自动执行位置更改,无需在 onDrag 回调中调用 change.consumePositionChange(I42fc4b/185096350b/187320697
  • 更改了 Modifier.onGloballyPositioned();更改后,系统会报告此修饰符在修饰符链中的坐标,而不会报告在应用所有修饰符后的布局坐标。这意味着,修饰符的顺序现在会影响系统报告什么坐标。(Ieb67db/177926591

版本 1.0.0-beta07

2021 年 5 月 18 日

发布了 androidx.compose.animation:animation:1.0.0-beta07androidx.compose.animation:animation-core:1.0.0-beta07版本 1.0.0-beta07 中包含这些提交内容

API 变更

  • 新增了 AnimatedVisibility API,支持在 MutableTransitionState 中指定可见性。这也使动画状态能够通过 currentStateisIdleAnimatedVisibility 外部观察到。
    • 在 Transition 中新增了子级过渡支持
    • 支持使用 AnimationScope.transition 在 AnimatedVisibility 中自定义退出/进入过渡动画
    • 新增了 animateEnterExit 修饰符,可供 AnimatedVisibility 的所有子级访问
    • 废弃了采用 initiallyVisible 参数的 AnimatedVisibility API (I702f3)

版本 1.0.0-beta06

2021 年 5 月 5 日

发布了 androidx.compose.animation:animation:1.0.0-beta06androidx.compose.animation:animation-core:1.0.0-beta06版本 1.0.0-beta06 中包含这些提交内容

版本 1.0.0-beta05

2021 年 4 月 21 日

发布了 androidx.compose.animation:animation:1.0.0-beta05androidx.compose.animation:animation-core:1.0.0-beta05版本 1.0.0-beta05 中包含这些提交内容

bug 修复

  • ui-test-manifest 和 ui-tooling-data 中的 AndroidManifest 文件现在与 Android 12 兼容(I6f9deb/184718994

版本 1.0.0-beta04

2021 年 4 月 7 日

发布了 androidx.compose.animation:animation:1.0.0-beta04androidx.compose.animation:animation-core:1.0.0-beta04版本 1.0.0-beta04 中包含这些提交内容

API 变更

  • 移除了 RowScopeColumnScopeBoxScopeBoxWithConstraintsScope 的公共实例。(I4e83eb/181869067

版本 1.0.0-beta03

2021 年 3 月 24 日

发布了 androidx.compose.animation:animation:1.0.0-beta03androidx.compose.animation:animation-core:1.0.0-beta03版本 1.0.0-beta03 中包含这些提交内容

版本 1.0.0-beta02

2021 年 3 月 10 日

发布了 androidx.compose.animation:animation:1.0.0-beta02androidx.compose.animation:animation-core:1.0.0-beta02版本 1.0.0-beta02 中包含这些提交内容

bug 修复

版本 1.0.0-beta01

2021 年 2 月 24 日

发布了 androidx.compose.animation:animation:1.0.0-beta01androidx.compose.animation:animation-core:1.0.0-beta01版本 1.0.0-beta01 中包含这些提交内容

这是 Compose 1.0.0 Beta 版的第一个版本。

API 变更

  • InteractionState 已替换为 [Mutable]InteractionSource
    • 接口负责发出/收集 Interaction 事件。
    • 应使用 interactionSource = remember { MutableInteractionSource() },而不是将 interactionState = remember { InteractionState() } 传递给 ButtonModifier.clickable() 等组件。
    • 应改用 InteractionSource 的扩展函数,比如 InteractionSource.collectIsPressedAsState(),而不是使用 Interaction.Pressed in interactionState
    • 对于复杂用例,您可以使用 InteractionSource.interactions 来观察互动流。如需了解详细信息,请参阅 InteractionSource 文档和示例。
    • I85965b/152525426b/171913923b/171710801b/174852378
  • smoothScrollBy 和 scrollBy 方法的软件包更改为 androidx.compose.foundation.gestures.*I3f7c1b/175294473
  • 重命名了尺寸修饰符。Modifier.width/height/size 已重命名为 requiredWidth/requiredHeight/requiredSize。Modifier.preferredWidth/preferredHeight/preferredSize 已重命名为 width/height/size。(I5b414)
  • Orientation 已移至 foundation 软件包。VelocirtTracker 已从 ui.gesture 移至 ui.input.pointer。(Iff4a8b/175294473
  • 已移除 AnimationClockObservable 和子类。已移除 AnimatedFloat。(Icde52b/177457083
  • Modifier.draggable 现在接受 DraggableState 而不是简单的 lambda。您可以通过 rememberDraggableState { delta -> } 创建状态,以获得与之前相同的行为(Ica70fb/175294473
  • 已移除 animate、animatedValue 和 AnimatedValue API(If27bcb/177457083
  • 移除了 AnimationEndReason.Interrupted。如果动画中断,系统将抛出 CancellationException。(I2cbbcb/179695417
  • 已移除 TargetAnimation API。(If47d1b/177457083

版本 1.0.0-alpha12

2021 年 2 月 10 日

发布了 androidx.compose.animation:animation:1.0.0-alpha12androidx.compose.animation:animation-core:1.0.0-alpha12版本 1.0.0-alpha12 中包含这些提交内容

API 变更

  • Modifier.pointerInput 现在需要 remember 键来指示指针输入检测协程何时应重启以建立新的依赖项。(I849cd)
  • Bounds 已重命名为 DpRect (I4b32a)
  • 在动画系统中,将 AnimationSpec 的参数名称统一为 animationSpec。此外,还对 Enter/ExitTransition 进行了限制以使其接受 FiniteAnimationSpec。(Ie47c5b/177457083
  • Animatable.snapTo 和 Animatable.stop 现在是挂起函数 (If4288)
  • 现在提倡 remember { mutableStateOf(0) } 这样的用法,我们将移除 savedInstanceState { 0 } 可组合项,与之前移除 state { 0 } 可组合项的方式类似。您应改用 rememberSaveable { mutableStateOf(0) },如果 MutableState 中使用的类型可以存储在 Bundle 中,它将会自动保存和恢复。如果您以前传递的是自定义 Saver 对象,那么您现在需要使用 rememberSaveable 的新重载,该新重载具有 stateSaver 参数。用法将如下所示:val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) }Ib4c26b/177338004
  • 更新了 Crossfade 的方法签名,以便与动画系统的其余部分更加一致。(Ib05edb/177457083
  • rememberSavedInstanceState() 已重命名为 rememberSaveable() 并移至 androidx.compose.runtime.saveable 软件包。(I1366eb/177338004
  • RestorableStateHolder 已重命名为 SaveableStateHolder 并移至 androidx.compose.runtime.saveable package。内部方法 RestorableStateProvider 已重命名为 SaveableStateProvider。已移除通用类型,因此您可以直接将 Any 作为键传递。不再需要实验性注解。(I0902eb/174598702
  • 更新了 Modifier.animateContentSize API,以便与动画系统的其余部分保持一致。(I0bf75b/177457083
  • 现已弃用 AnimatedValue/Float,请改用 Animatable。(I71345b/177457083
  • 已弃用 tapGestureFilter、doubleTapGestureFilter、longPressGestureFilter 和 pressIndicaitonGestureFilter。改为将 Modifier.clickable 或 Modifier.pointerInput 与 detectTapGestures 函数一起使用。(I6baf9b/175294473
  • 引入了将应用于无限动画的 InfiniteAnimationPolicy 协程上下文元素。默认情况下,除非使用 ComposeTestRule 运行测试,否则系统不会安装任何政策。(I50ec4b/151940543
  • 解构和 copy() 方法在多个类中很少用到,现已将其从这些类中移除。(I26702b/178659281
  • 动画中的播放时间现已统一为纳秒级 (If776a)
  • 现已弃用 compose:runtime-dispatch 工件。现在,MonotonicFrameClock 位于 compose:runtime 中,AndroidUiDispatcher 位于 compose:ui 中。(Ib5c36)
  • 添加了 Animation.isInfiniteVectorizedAnimationSpec.isInfinite,以指明动画是否无限。这可以用在动画的实现中,以对动画进行特殊处理。例如,可以显示特殊的“剩余时间”消息,或者在测试期间,可以取消动画以防止无限期地等待空闲时间。(Iebb05b/151940543
  • 使用 Long 而不是 Uptime 作为动画时间类型(Ie3aa7b/177420019

版本 1.0.0-alpha11

2021 年 1 月 28 日

发布了 androidx.compose.animation:animation:1.0.0-alpha11androidx.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)

bug 修复

  • onCommit、onDispose 和 onActive 已弃用,取而代之的是 SideEffect API 和 DisposableEffect API (If760e)
  • 现在支持 updateTransition 中的初始 State (Ifd51d)
  • 向 Image 和 Icon 添加了内容说明参数,用于提供对无障碍服务的说明 (I2ac4c)
  • invalidate 和 compositionReference() 现已弃用,取而代之的分别是 currentRecomposeScope 和 rememberCompositionReference。(I583a8)
  • Duration 和 Uptime 将替换为 Long 毫秒值,此步骤移除了指针输入对这些类的依赖。(Ia33b2b/175142755b/177420019
  • 现在可以在组合之外创建可点击项、可切换项和可选择项(I0a130b/172938345b/175294473
  • 加/减速选项已更改为功能接口 (Ib14e5)
  • 为 LazyColumn/LazyRow/LazyVerticalGrid 的作用域新增了 items(count: Int) 工厂方法。items(items: List)itemsIndexed(items: List) 现在是扩展函数,因此您必须在使用时将其手动导入。为 Array 新增了扩展函数重载:items(items: Array) 和 itemsIndexed(Array)(I803fcb/175562574
  • 在测试中使用 TestCoroutineDispatcher (I532b6)
  • 移除了 PointerInputData 并修改了 PointerInputChange,以为其指定 PointerInputData 的所有字段。已将 PointerInputEvent 和 PointerInputEventData 变成内部类,因为它们不会在任何公共 API 中使用。(Ifff97b/175142755

版本 1.0.0-alpha10

2021 年 1 月 13 日

发布了 androidx.compose.animation:animation:1.0.0-alpha10androidx.compose.animation:animation-core:1.0.0-alpha10版本 1.0.0-alpha10 中包含这些提交内容

API 变更

  • 修改了 Velocity,现在包含分量部分和数学运算。(Ib0447)
  • @ExperimentalTesting 已重命名为 @ExperimentalTestApi,以便与类似的实验性 API 注解保持一致(Ia4502b/171464963
  • Position 已重命名为 DpOffset,并移除了 getDistance() (Ib2dfd)
  • 移除了 Any.identityHashCode() 公共 API (I025d7)

bug 修复

  • 新增了基于协程的 API Animatable,用于确保其动画间的互斥性。新增了 DecayAnimationSpec,用于支持多维衰减动画(I820f2b/168014930
  • animate() 现已替换为 animateAsState(),后者会返回 State<T> 而不是 T。这样可以提高性能,因为失效范围可缩小到读取 State 值的位置。(Ib179e)

版本 1.0.0-alpha09

2020 年 12 月 16 日

发布了 androidx.compose.animation:animation:1.0.0-alpha09androidx.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)

bug 修复

  • 现在,offset 修饰符中的 lambda 会返回 IntOffset(而非 Float)。(Ic9ee5b/174137212b/174146755
  • 弃用了 LazyColumnFor、LazyRowFor、LazyColumnForIndexed 和 LazyRowForIndexed,改为使用 LazyColumn 和 LazyRow (I5b48c)
  • 针对挂起指针输入 API,已将 HandlePointerInputScope 重命名为 AwaitPointerEventScope,并将 handlePointerInput() 重命名为 awaitPointerEventScope()。(Idf0a1b/175142755
  • 新增了用于创建 InfiniteRepeatableSpec 的 infiniteRepeatable 函数 (I668e5)
  • 移除了 ExperimentalPointerInput 注解 (Ia7a24)

版本 1.0.0-alpha08

2020 年 12 月 2 日

发布了 androidx.compose.animation:animation:1.0.0-alpha08androidx.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
    • Ie9d02b/172562222
  • 暂时添加了相应选项,让 TestAnimationClock 可由 MonotonicFrameClock 驱动(I1403bb/173402197

bug 修复

  • 已将 Modifier.drawLayer 重命名为 Modifier.graphicsLayer。此外,还根据 API 委员会反馈将相关类更新为了 GraphicsLayer。(I0bd29b/173834241
  • 添加了 Modifier.scale/rotate API 作为 drawLayer 的便捷 API。
    • Modifier.drawOpacity 已重命名为 Modifier.alpha
    • Modifier.drawShadow 已重命名为 Modifier.shadow(I264cab/173208140
  • 将 PointerInputData 的 uptime 字段和 position 字段设为了不可为 null。(Id468a)
  • 已将 offsetPx 修饰符重命名为 offset。现在,它们采用 lambda 参数(而非 State)。(Ic3021b/173594846
  • 添加了用于在协程中运行动画的新 API (Ied662)
  • 弃用了名称后缀为 Ambient 的 Ambient 属性,将它们替换成了以 Ambient 为前缀的新属性(以与其他 Ambient 属性保持一致并遵循 Compose API 准则)。(I33440)
  • 现在,测试中的时间控件(TestAnimationClock 及其用例)处于实验阶段(I6ef86b/171378521
  • 移除了旧的 ui-test 模块及其桩 (I3a7cb)
  • RestorableStateHolder.withRestorableState 函数已重命名为 RestorableStateProvider (I66640)
  • Alignment 接口经过了更新,可正常工作。(I46a07b/172311734

版本 1.0.0-alpha07

2020 年 11 月 11 日

发布了 androidx.compose.animation:animation:1.0.0-alpha07androidx.compose.animation:animation-core:1.0.0-alpha07版本 1.0.0-alpha07 中包含这些提交内容

bug 修复

  • 弃用了 Foundation AmbientTextStyle、ProvideTextStyle 和 AmbientContentColor,请改为使用 Material 库中提供的新版本。对于非 Material 应用,您应改为创建自己的设计系统专属主题上下文环境,以便在您自己的组件中使用。(I74accb/172067770
  • 弃用了 foundation.Text,取而代之的是 material.Text。如需了解不使用来自主题的值的“非预设立场型”基本文本 API,请参阅 androidx.compose.foundation.BasicText。(If64cb)
  • 已将 MeasureResult 从 MeasureScope 中移出。(Ibf96db/171184002
  • 已将几个与布局相关的符号从 androidx.compose.ui 移至 androidx.compose.layout.ui。(I0fa98b/170475424

版本 1.0.0-alpha06

2020 年 10 月 28 日

发布了 androidx.compose.animation:animation:1.0.0-alpha06androidx.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-alpha05androidx.compose.animation:animation-core:1.0.0-alpha05版本 1.0.0-alpha05 中包含这些提交内容

API 变更

  • 新增了 Animation 接口和子类:这些类存储动画的开始和结束条件,因此仅支持通过播放时间查询值和速度(Ie95bdb/163329867

bug 修复

  • 将 OnPositionedModifier 重命名为 OnGloballyPositionedModifier,并将 onPositioned() 重命名为 onGloballyPositioned()。(I587e8b/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-alpha04androidx.compose.animation:animation-core:1.0.0-alpha04版本 1.0.0-alpha04 中包含这些提交内容

API 变更

  • 使用 @VisibleForTesting 对 rootAnimationClockFactory、transitionsEnabled、blinkingCursorEnabled 和 textInputServiceFactory 进行了注解,使这些 API 变为内部 API 并隐藏其 KDoc(I554ebb/168308412

bug 修复

  • 更新了多个图形 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 扩展函数迁移为属性
    • I8f5c7b/168762961
  • 弃用了 foundation.Box。请改用 foundation.layout.Box。(Ie5950b/167680279
  • Stack 已重命名为 Box。将弃用之前存在的 Box,改为使用 compose.foundation.layout 中的新 Box。新的 Box 会在存在多个子元素时,在堆栈中将一个子元素放在另一个子元素之上,其行为不同于旧版 Box,后者的行为类似于 Column。(I94893b/167680279
  • 弃用了 Box 装饰参数。如果您想对框进行装饰/填充,请改为使用 Modifier(Modifier.background、Modifier.border、Modifier.padding)(Ibae92b/167680279
  • 我们已阻止静态导入布局作用域的内容(例如:RowScope 中的 alignWithSiblings),请改用显式作用域替代项:with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) }。(I216beb/166760797

版本 1.0.0-alpha03

2020 年 9 月 16 日

发布了 androidx.compose.animation:animation:1.0.0-alpha03androidx.compose.animation:animation-core:1.0.0-alpha03版本 1.0.0-alpha03 中包含这些提交内容

bug 修复

  • gravity 在布局 API 中用到时被一致地重命名为 align 或 alignment。(I2421ab/164077038

版本 1.0.0-alpha02

2020 年 9 月 2 日

发布了 androidx.compose.animation:animation:1.0.0-alpha02androidx.compose.animation:animation-core:1.0.0-alpha02版本 1.0.0-alpha02 中包含这些提交内容

API 变更

  • 添加了 ManualFrameClock.hasAwaiters,用于检查是否有任何内容在等待来自相应时钟的帧;在运行需要 ManualFrameClock 的测试时,runWithManualClock 可用于替代 runBlockingTestUiDispatcher.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")
        }
    }
    

    I0a85bb/161247083

bug 修复

  • 弃用了 onPreCommit;onCommit 的功用现在与 onPreCommit 相同。

    现在,onCommit 和 onActive 在已提交的组成部分变更的同一 Choreographer 帧中运行,而不是在下一个 Choreographer 帧开始处运行。(I70403)

版本 1.0.0-alpha01

2020 年 8 月 26 日

发布了 androidx.compose.animation:animation:1.0.0-alpha01androidx.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-dev17androidx.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,并添加了适当的弃用/替换注释,以辅助迁移。(I37038b/162627058

bug 修复

  • PlacementScope.placeAbsolute() 已重命名为 PlacementScope.place(),以前的 PlacementScope.place() 已重命名为 PlacementScope.placeRelative()。因此,PlacementScope.place() 方法将不再自动在从右到左的上下文中镜像位置。如果需要执行此镜像,请改用 PlacementScope.placeRelative()。(I873acb/162916675
  • 为清楚起见,现在弃用了 state { ... } 可组合项,改为对 remember { mutableStateOf(...) } 的显式调用。这样可减少管理状态所需的整体 API Surface 及概念数量,且与类属性委托的 by mutableStateOf() 模式相一致。(Ia5727)

版本 0.1.0-dev16

2020 年 8 月 5 日

发布了 androidx.compose.animation:animation:0.1.0-dev16androidx.compose.animation:animation-core:0.1.0-dev16版本 0.1.0-dev16 中包含这些提交内容

API 变更

  • 现在可通过 Foo.VectorConverter 访问用于转换内置单位的内置矢量转换器。例如 Dp.VectorConverterColor.VectorConverterFloat.VectorConverter 等 (I3e273)
  • 支持在 Modifier.animateContentSize() 中使用结束监听器,以便监听器在尺寸有变化的动画播放完毕后能够收到通知,并得知动画的开始/结束尺寸。(I277b2)
  • 新增了 animateContentSize 修饰符,用于为其子修饰符的布局尺寸变化添加动画效果 (Ieffdc)
  • 添加了 MonotonicFrameAnimationClock,让您能够将 MonotonicFrameClock 用作 AnimationClockObservable,以消除基于协程的新时钟与仍使用基于回调的旧时钟的 API 之间的差异。

    现在,ManualAnimationClockMonotonicFrameClock 等效项是 ManualFrameClock。(I111c7b/161247083

bug 修复

  • 更新了 API 对从右到左布局的支持。添加了 LayoutDirectionAmbient,可用于读取和更改布局方向。移除了 Modifier.rtl 和 Modifier.ltr。(I080b3)
  • 要求为 transitionDefinition 明确指定类型 T。(I1aded)
  • foundation.shape.corner 软件包已扁平化为 foundation.share(I46491b/161887429
  • 已弃用 Modifier.plus,现在改用 Modifier.then。“Then”能够更明确地指出先后执行顺序,同时还禁止输入会破坏链且降低可读性的 Modifier.padding().background() + anotherModifierIedd58b/161529964
  • Modifier.drawBackground 已重命名为 Modifier.background (I13677)

版本 0.1.0-dev15

2020 年 7 月 22 日

发布了 androidx.compose.animation:animation:0.1.0-dev15androidx.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)
  • 为淡入淡出添加了修饰符参数(I87cfeb/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> 文档(I4c7eeb/143769776
  • 新的重复模式:Reverse。当动画在 RepeatableSpec 或 VectorizedRepeatableSpec 中重复时,此模式会返回上一次迭代。(Ibe0f5)
  • ManualAnimationClock 增加了 API 内容:hasObservers: Boolean 和构造函数参数 dispatchOnSubscribe: Boolean (Iaa134)
  • 添加了 API 以在 AnimatedFloat 中获取最小/最大边界 (Icd9cc)

bug 修复

  • 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 用作初始值(Iad6a4b/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() 方法(Ibacedb/152919067
  • runOnIdleComposerunOnUiThread 现在是全局函数,而不是 ComposeTestRule 上的方法。(Icbe8f)
  • [Mutable]State 属性委托运算符移到了扩展程序,以支持 Kotlin 1.4 属性委托优化。调用方必须添加 import 才能继续使用 by state { ... }by mutableStateOf(...)。(I5312c)
  • 已弃用 ColoredRect,现改用 Box(Modifier.preferredSize(width, height).drawBackground(color))。(I499fab/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 伴生对象方法,改为使用实例复制方法(Ife290b/159905651
  • androidx.compose.ViewComposer 移到了 androidx.ui.node.UiComposer。移除了 androidx.compose.Emittable,它与 ComponentNode 重复。移除了 androidx.compose.ViewAdapters,它们不再是受支持的用例。已弃用 Compose.composeInto,请改为使用 setContentsetViewContent。已弃用 Compose.disposeComposition,改用 setContent 返回的 Compositiondispose 方法。 androidx.compose.Compose.subcomposeInto 已移到 androidx.ui.core.subcomposeInto ComponentNode#emitInsertAt 已重命名为 ComponentNode#insertAt ComponentNode#emitRemoveAt 已重命名为 ComponentNode#removeAt ComponentNode#emitMode 已重命名为 ComponentNode#move (Idef00)