首页/新闻资讯/正文详情

【Jetpack Compose进阶学与练】第17课 Compose动画基础;animate*AsState、Transition;页面元素显隐动画

发布时间:2026/9/24 17:31:11 来源:云帆数科 栏目:资讯中心
【Jetpack Compose进阶学与练】第17课 Compose动画基础;animate*AsState、Transition;页面元素显隐动画
前言前面课程学习了布局、状态、列表分页、Canvas手绘。Compose不再依靠xml写动画全部是声明式动画。状态发生变化框架自动插值产生动画。本节课学习基础动画API animate*AsState 、 AnimatedVisibility 、 Transition 掌握组件显隐、尺寸、颜色渐变。知识点清单Compose声明式动画核心思想状态驱动动画状态一变动画自动跑animate*AsState单一值动画颜色、尺寸、偏移AnimatedVisibility组件显示隐藏入场、退场Transition多属性同时动画一个状态变更同时驱动多个动画简单Demo按钮控制方块缩放变色、显示消失完整示例源码importandroidx.compose.animation.AnimatedVisibilityimportandroidx.compose.animation.animateColorAsStateimportandroidx.compose.animation.animateSizeAsStateimportandroidx.compose.animation.core.animateDpAsStateimportandroidx.compose.animation.fadeInimportandroidx.compose.animation.fadeOutimportandroidx.compose.animation.scaleInimportandroidx.compose.animation.scaleOutimportandroidx.compose.animation.transitionimportandroidx.compose.foundation.backgroundimportandroidx.compose.foundation.layout.Arrangementimportandroidx.compose.foundation.layout.Boximportandroidx.compose.foundation.layout.Columnimportandroidx.compose.foundation.layout.sizeimportandroidx.compose.material3.Buttonimportandroidx.compose.material3.Textimportandroidx.compose.runtime.Composableimportandroidx.compose.runtime.getValueimportandroidx.compose.runtime.mutableStateOfimportandroidx.compose.runtime.rememberimportandroidx.compose.runtime.setValueimportandroidx.compose.ui.Alignmentimportandroidx.compose.ui.Modifierimportandroidx.compose.ui.Colorimportandroidx.compose.ui.unit.dpenumclassBoxState{Small,Large}ComposablefunAnimationBasicScreen(){//布尔开关控制方块状态vartogglebyremember{mutableStateOf(false)}//枚举状态用于Transition演示varboxStatebyremember{mutableStateOf(BoxState.Small)}//单一值动画dp尺寸动画valtargetSizebyanimateDpAsState(targetValueif(toggle)200.dpelse80.dp,labelsizeAnim)//单一值动画颜色动画valtargetColorbyanimateColorAsState(targetValueif(toggle)Color(0xFF2196F3)elseColor(0xFFFF5722),labelcolorAnim)Column(modifierModifier,horizontalAlignmentAlignment.CenterHorizontally,verticalArrangementArrangement.spacedBy(20.dp)){Button(onClick{toggle!toggle}){Text(切换方块(animate*AsState))}Box(modifierModifier.size(targetSize).background(targetColor))//AnimatedVisibility 显隐动画Button(onClick{boxStateif(boxStateBoxState.Small)BoxState.LargeelseBoxState.Small}){Text(控制方块显示隐藏‑AnimatedVisibility)}AnimatedVisibility(visibleboxStateBoxState.Large,enterfadeIn()scaleIn(),exitfadeOut()scaleOut()){Box(modifierModifier.size(120.dp).background(Color(0xFF4CAF50)))}}}逐行解读Compose动画核心思想状态驱动传统Android View体系先定义动画资源xml之后调用 start() 手动启动动画。Compose声明式动画只修改业务状态框架自动对比旧值和目标值中间插值自动播放动画。不需要手动调用start。animate*AsState系列animateDpAsState / animateColorAsState适合单个属性做动画返回一个经过动画插值之后的值直接给到size、background。targetValue动画的目标值当这个值发生改变自动开始插值动画。label参数用于动画调试预览Android Studio动画预览工具识别。局限一次只能驱动一个属性如果希望同时驱动尺寸、颜色、偏移多个属性适合使用Transition。AnimatedVisibility组件入场退场专门控制组件显示与消失visible布尔状态true显示false消失enter入场动画可以使用叠加多种动画效果fadeIn淡入 scaleIn放大进入exit退场动画fadeOut淡出 scaleOut缩小消失。注意不是简单的gone/invisible组件在退场期间仍然存在执行完退场动画之后才从组件树移除。Transition多属性同时动画Transition基于状态布尔或者枚举一个状态切换同时驱动多个动画颜色大小偏移。AnimatedVisibility内部底层其实就是基于Transition封装出来的高层API。业务场景页面卡片从状态A完整过渡到状态B同时尺寸、圆角、颜色一起变化优先Transition。动画的速度控制animationSpec所有的animate*AsState都可以传入animationSpec可以设置持续时长、阻尼弹性动画spring弹簧动画、tween补间。tween指定时间的线性/缓动补间spring弹簧物理动画有回弹效果Compose里面非常推荐使用弹簧动画。容易踩坑❌ 试图手动调用start()启动动画Compose动画依靠修改状态来驱动没有start函数。❌ AnimatedVisibility直接修改visibility属性不要手动控制组件是否渲染交给AnimatedVisibility管理组件树。❌ 动画状态放在ViewModel里面的时候注意动画过程当中频繁的值不适合存ViewModelViewModel适合保存目标业务状态动画插值中间值交给Compose运行时内部维护。❌ 动画执行过程当中反复快速切换状态Compose支持动画打断与换向会平滑切换到新目标不需要开发者处理中断逻辑。✅ animate*AsState适合单个属性AnimatedVisibility专门做显隐Transition适合多属性联动修改业务状态触发动画spring弹簧动画优先选用。多元化习题练习习题1【基础‑改错题】开发按照旧View思路想找Compose动画的start()启动方法找不到为什么答案Compose动画是声明式状态驱动不需要调用start修改targetValue对应的业务状态框架自动插值播放动画。解读思维需要从命令式启动动画转向状态驱动。习题2【基础‑代码修改题】给animateDpAsState增加动画规格使用tween动画持续600毫秒。答案valtargetSizebyanimateDpAsState(targetValueif(toggle)200.dpelse80.dp,animationSpecandroidx.compose.animation.core.tween(durationMillis600),labelsizeAnim)解读animationSpec参数控制动画时间、插值曲线。习题3【进阶‑补充代码题】AnimatedVisibility入场希望同时实现淡入 从上往下滑入如何写enter答案enterfadeIn()androidx.compose.animation.slideInVertically()解读使用加号运算符叠加多种入场动画效果。习题4【综合‑逻辑应用题】animateAsState 和 Transition二者适用场景怎么区分答案animateAsState适合只对单独一个属性执行动画简单轻量Transition同一个状态变更同时驱动多个属性大小颜色偏移圆角一起变化适合卡片完整状态切换。AnimatedVisibility是Transition上层封装。解读优先高层API复杂多属性联动再使用Transition。习题5【概念简答题】spring弹簧动画对比tween时间补间动画效果上有什么区别答案tween严格按照设定的毫秒时间完成动画匀速或者指定缓动曲线spring是物理仿真弹簧没有固定时长会有轻微回弹震荡交互反馈更加生动适合点击反馈。解读Material3组件大量内部使用spring弹簧动画。本节课知识点总结Compose动画核心理念状态驱动动画修改业务状态自动插值播放动画没有start()方法分为tween固定时长补间、spring弹簧物理动画。animate*AsState系列API适合单一属性动画dp、color、offset。AnimatedVisibility高层API专门用于组件的显示和消失支持入场enter退场exit可以使用叠加多种动画效果。Transition底层API用于一个状态变更同时驱动多项属性联动动画AnimatedVisibility基于Transition实现。业务目标状态可以上ViewModel动画运行过程的中间插值值由Compose框架维护不要保存到ViewModel。下一课预告第18课 权限、WorkManager后台任务Compose当中处理系统服务

相关推荐

企业微信客户运营实操:如何用企业微信SCRM5步搭建客户管理体系?
企业微信客户运营实操:如何用企业微信SCRM5步搭建客户管理体系?

企业微信SCRM搭建客户管理体系,是很多企业用企业微信做私域运营的核心诉求。但客户加进来了,怎么管理?销售在群里发广告,客服在私聊里回消息,市场部不知道客户在哪,运营部不知道客户是谁。问题出在哪&#… · 2026/9/24 17:31:11

【大厂面试题】有写过MCP服务吗:用TaoToken统一Key跑通一个最小MCP Server
【大厂面试题】有写过MCP服务吗:用TaoToken统一Key跑通一个最小MCP Server

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 17:31:11

AI搜索带来新型用户需求:个人微信二次开发如何做好智能咨询与服务承接
AI搜索带来新型用户需求:个人微信二次开发如何做好智能咨询与服务承接

AI搜索普及后,一个明显变化正在发生:用户加微信咨询时问的问题不一样了。以前用户问"这个产品多少钱""有什么功能",这些信息现在直接问AI搜索就有答案,根本不会来找客服。能让用户多走一步加微信的&#xff0… · 2026/9/24 17:31:05

CSDN + AI:程序员的新生产力引擎
CSDN + AI:程序员的新生产力引擎

1. 引言:当技术社区遇上 AI在人工智能浪潮席卷各行各业的今天,技术社区与 AI 的结合正在重塑程序员的日常工作方式。CSDN 作为国内领先的技术社区,正在将 AI 能力深度融入内容创作、技术学习和代码开发等场景,为程序员构建全新的生… · 2026/9/24 19:18:02

AI算力加速实用指南:从GPU利用率到模型量化,效率翻倍的关键策略
AI算力加速实用指南:从GPU利用率到模型量化,效率翻倍的关键策略

AI算力加速:效率翻倍的入门学习指南说实话,这几年聊AI算力的人越来越多,但大多数讨论都容易走进一个误区:一提到算力不够,第一反应就是“要买更贵的卡”。我在实际项目里踩过的坑告诉我,这个思路往往既烧钱… · 2026/9/24 19:18:02

2722张杂草作物标注图竟够用?YOLO训练全流程与避坑指南
2722张杂草作物标注图竟够用?YOLO训练全流程与避坑指南

简介:这是一份面向YOLO系列算法目标检测任务的杂草与作物数据集压缩包,适合刚入门目标检测或需要农业场景训练数据的开发者。数据集中已包含标注好的图像与对应标签,并划分好训练集和验证集,附有data.yaml配置,可直接用… · 2026/9/24 19:18:02

Windows 10/11安全模式完全指南:从进入、修复到退出的系统救援手册
Windows 10/11安全模式完全指南:从进入、修复到退出的系统救援手册

1. 安全模式到底是什么,它为什么能救命 1.1 从崩溃到修复:安全模式的核心原理 前两天一个朋友跟我说,他的Win11电脑开机就是蓝屏,转圈转到一半直接卡死,连安全模式都进不去,问我怎么办。我远程一看&#x… · 2026/9/24 19:18:02

本地离线4K AI视频生成实战:LTX Desktop开源编辑器深度评测
本地离线4K AI视频生成实战:LTX Desktop开源编辑器深度评测

1. 从"剪映焦虑"说起:为什么本地离线4K生成这件事值得认真聊最近圈子里讨论度很高的一件事,就是LTX Desktop这个开源AI视频编辑器。我第一时间把它拉下来跑了一遍,从安装到出片折腾了差不多两天,中间踩的坑不算少&#… · 2026/9/24 19:18:02

AI算力加速实战:从瓶颈分析到软件优化的完整指南
AI算力加速实战:从瓶颈分析到软件优化的完整指南

说实话,很多人一听到“AI算力加速”这几个字,第一反应就是砸钱换显卡、堆机器。我刚开始入行那会儿也这么想,总觉得训练跑得慢就是GPU不够好。后来跟项目跟得多了才发现,真正的效率瓶颈往往根本不在显卡上,而是被数据加… · 2026/9/24 19:17:55

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码