Compose 动画 (四) : AnimatedVisibility 各种入场和出场动画效果

news2024/9/20 0:49:19

AnimatedVisibility中的EnterTransition ExitTransition ,用来配置入场/出场时候的动画效果。

默认的入场效果是 fadeIn() + expandVertically()
默认的出场效果是 fadeOut() + shrinkVertically()

1. EnterTransitionExitTransition支持的动画

enter的参数类型是EnterTransition,支持这些动画

  • 淡入 : fade: fadeIn
  • 缩放 : scale: scaleIn
  • 滑动 : slide: slideIn, slideInHorizontally, slideInVertically
  • 展开 : expand: expandIn, expandHorizontally, expandVertically

exit的参数类型是EnterTransition,支持这些动画

  • 淡出 : fade: fadeOut
  • 缩放 : scale: scaleOut
  • 滑动 : slide: slideOut, slideOutHorizontally, slideOutVertically
  • 收缩 : shrink: shrinkOut, shrinkHorizontally, shrinkVertically

可以看到EnterTransitionExitTransition支持的动画只有expandshrink命名上有区别,
其他都是对应的 fadeInfadeOutscaleInscaleOutslideInslideOut
expandshrink命名上做区分,是因为expand就是展开的意思,而shrink收缩的意思,它们其实就是相对应的。

2. fadeIn / fadeOut

fadeIn / fadeOut是淡出淡出的效果

我们使用上篇文章中的那段代码

@Composable
fun AnimatedVisibilityPage() {
    Column(horizontalAlignment = Alignment.CenterHorizontally) {
        var visible by remember {
            mutableStateOf(true)
        }
        AnimatedVisibility(visible = visible) {
	        MyImage()
	    }
        Spacer(modifier = Modifier.height(10.dp))
        Button(onClick = { visible = !visible }) {
            Text(text = "显示/隐藏")
        }
    }
}

@Composable
private fun MyImage() {
    Image(
        painter = painterResource(id = R.mipmap.photot1),
        modifier = Modifier.width(300.dp),
        contentDescription = null
    )
}

然后修改AnimatedVisibility,配置enterexit

AnimatedVisibility(
    visible = visible,
    enter = fadeIn(),
    exit = fadeOut()
) {
    MyImage()
}

效果如下所示
在这里插入图片描述

3. scaleIn / scaleOut

scaleIn / scaleOut是缩放的效果

AnimatedVisibility(
    visible = visible,
    enter = scaleIn(),
    exit = scaleOut()
) {
    MyImage()
}

效果如下所示
在这里插入图片描述

4. slideIn / SlideOut

slideIn / SlideOut是滑动的效果,这里进入的初始位置和退出的目标位置都设置为了(300,-150),所以会从右上角进入/退出

AnimatedVisibility(
    visible = visible,
    enter = slideIn(initialOffset = {
        IntOffset(300, -150) }
    ),
    exit = slideOut(targetOffset = {
        IntOffset(300,-150) }
    )
) {
    MyImage()
}

效果如下所示
在这里插入图片描述

5. slideInVertically / slideOutVertically

slideInVertically / slideOutVertically是垂直方向滑动进入/退出

AnimatedVisibility(
    visible = visible,
    enter = slideInVertically(),
    exit = slideOutVertically()
) {
    MyImage()
}

效果如下所示
在这里插入图片描述

5.1 slideInHorizontally / slideOutHorizontally

slideInHorizontally / slideOutHorizontally是从横向方向滑动进入/退出

AnimatedVisibility(
    visible = visible,
    enter = slideInHorizontally(),
    exit = slideOutHorizontally()
) {
    MyImage()
}

效果如下所示
在这里插入图片描述

6. expandIn / shrinkOut

expandIn / shrinkOut展开/收缩的效果

AnimatedVisibility(
    visible = visible,
    enter = expandIn(),
    exit = shrinkOut()
) {
    MyImage()
}

效果如下所示
在这里插入图片描述

6.1 expandVertically / shrinkVertically

expandVertically / shrinkVertically是从垂直方向展开/收缩

AnimatedVisibility(
    visible = visible,
    enter = expandVertically(),
    exit = shrinkVertically()
) {
    MyImage()
}

效果如下所示
在这里插入图片描述

6.2 expandHorizontally / shrinkHorizontally

expandHorizontally / shrinkHorizontally是从横向方向展开/收缩

AnimatedVisibility(
    visible = visible,
    enter = expandHorizontally(),
    exit = shrinkHorizontally()
) {
    MyImage()
}

效果如下所示
在这里插入图片描述

7. 其他

7.1 Compose动画系列

Compose 动画系列,后续持续更新,可以先关注
Compose 动画 (一) : animateXxxAsState 实现放大/缩小/渐变等效果
Compose 动画 (二) : 为什么animateDpAsState要用val ? MutableState和State有什么区别 ?
Compose 动画 (三) : AnimatedVisibility 从入门到深入

7.2 参考

关于EnterTransition 和 ExitTransition 示例也可以看这里

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/393751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【VUE】vue3.0后台常用模板

vue3.0后台常用模板: 1、vue-admin-perfect 在线预览 gitee国内访问地址:https://yuanzbz.gitee.io/vue-admin-perfect/#/home github site : https://zouzhibin.github.io/vue-admin-perfect/ 基础功能版本预览:https://yuanzbz.gitee.io/…

上海亚商投顾:沪指失守3300点 两市上涨股不足500只

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪沪指今日冲高回落,午后跌幅扩大至1%,失守3300点关口,深成指、创业板指跌近2%。通…

Springboot 定时任务注入FeignClient

问题引入: 在springboot 项目写了个定时任务,里面有段代码通过Feign 调用远程服务,发现通过接口调用可以程序正常执行, 通过配置定时任务发现定时任务没执行,看日志是报了NP.问题跟踪: 写了个demo 重现以上错误:Api(tags "XXX控制器") RestController RequestMapp…

认识代码之前,请先认识你自己 |《编程人生》

这是我的湛庐课程《给技术人的职场突围课》 (链接) 的一部分。 这篇文章也是 IT 女神征文活动 的一部分。 《编程人生》是一本优秀程序员的采访集,里面记录了15位世界级编程大师的故事。 我在 发刊词 里面说过,在这个书单课里&am…

如何有效地降低软件开发风险?

1、科学分析风险 高风险自动预警 一般对风险进行科学分析,主要从3个维度进行划分:影响的严重性、发生的可能性、产生的影响性。 根据风险对项目的影响程度,从3个维度将其划分5个等级:很低、比较低、中等、比较高、很高。这样我们能…

react router零基础使用教程

安装既然学习 react router 就免不了运行 react安装 reactnpx create-react-app my-appcd my-appnpm start安装 react routernpm install react-router-dom如果一切正常,就让我们打开 index.js 文件。配置路由引入 react-router-dom 的 RouterProviderimport {Route…

JavaWeb--Filter

Filter1 Filter概述2 Filter快速入门2.1 开发步骤2.2 代码演示3 Filter执行流程4 Filter拦截路径配置5 过滤器链5.1 概述5.2 代码演示5.3 问题6 案例6.1 需求6.2 分析6.3 代码实现6.3.1 创建Filter6.3.2 编写逻辑代码6.3.3 测试并抛出问题6.3.4 问题分析及解决6.3.5 过滤器完整…

智慧供热|供热末端(住户)管网远程监测方案

智慧供热通过对供热相关数据的采集、分析和对热源、热网、末端(住户)的各个供热环节进行智能调控,从而进一步实现热网资源的配置优化,提高热网输送的能力。供热行业存在问题:供热企业目前面临的主要问题还是资金周转困…

MYSQL1

MySQL基本11、MySQL 中有哪几种锁?2、MySQL 中有哪些不同的表格?2、什么是存储引擎3、MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别4、CHAR 和 VARCHAR 的区别1、固定长度 & 可变长度2、存储方式3、存储容量4、CHAR会…

cookie session Token终极理解

左边 浏览器 右边 服务器 浏览器发送请求 服务器接收请求 并生成cookie 浏览器查看保存了哪些cookie 用户名密码放在cookie是很不安全的 因为浏览器一旦被攻击泄露 是很危险的 接着诞生了session 会话 sessionID (一段杂乱的字母标识) 会话结束时间 …

【云原生】Istio请求路由、流量转发、超时配置等

代码继续接着前面的文章【云原生】整合K8s SpringCloudK8s gRpc RocketMQ Istio Envoy,本篇文章我们测试下请求路由功能。生产中我们上了个新接口或者新功能,一般会经过 内灰 -> 外灰5% -> 外灰10% ...... 外灰100%的过程,这篇文章…

计算机图形学08:中点BH算法绘制抛物线(100x = y^2)

作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、算法原理二、…

springboot整合mybatis框架,简单实现CRUD

如果大家实在不知道怎么搞可以去看看官网:mybatis-plus官网MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。其实也就是在…

5. 驱动开发

文章目录一、驱动开发1.1 前言1.2 何谓驱动框架1.3 内核驱动框架中LED的基本情况1.3.1 相关文件1.3.2 九鼎移植的内核中led驱动1.3.3 案例分析驱动框架的使用1.3.4 典型的驱动开发行业现状1.4 初步分析led驱动框架源码1.4.1 涉及到的文件1.4.2 subsys_initcall1.4.3 led_class_…

windows应用(vc++2022)MFC基础到实战(1)

目录vc概述MFC 框架概述MFC 框架SDI 和 MDI文档、视图和框架窗口对象文档/视图体系结构第一个应用自动生成的主框架类源码vc概述 Microsoft Visual C(简称Visual C、MSVC、VS或VC)是微软公司的免费C开发工具,具有集成开发环境,可…

Spring Security OAuth2实现多用户类型认证、刷新Token

原本的OAuth2登录支持用户名密码登录,现在还想支持另外用id号码和密码登录。但是OAuth2默认提供的UserDetailsService只允许传入一个参数:想要实现多种用户登录,是不是可以考虑loadUserByUsername方法携带多个参数呢?接下来记录一…

Docker安装和Docker安装Nginx及其他常用操作

一、Docker简介 Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全…

机器学习与目标检测作业:连通块算法

机器学习与目标检测作业:连通块算法一、连通块算法题目描述二、连通块算法文件结构三、连通块算法程序编写3.1、连通块算法conBlock.h头文件内容3.2、conBlock.cpp源文件内容3.3.3、mian.h头文件内容3.3.4、main.cpp源文件内容如下四、连通块算法程序运行结果一、连…

【JS知识点】——原型和原型链

文章目录原型和原型链构造函数原型显式原型(prototype)隐式原型(\_\_proto\_\_)原型链总结原型和原型链 在js中,原型和原型链是一个非常重要的知识点,只有理解原型和原型链,才能深刻理解JS。在…

云上办公系统项目

云上办公系统项目1、云上办公系统1.1、介绍1.2、核心技术1.3、开发环境说明1.4、产品展示后台前台1.5、 个人总结2、后端环境搭建2.1、建库建表2.2、创建Maven项目pom文件guigu-oa-parentcommoncommon-utilservice-utilmodelservice-oa配置数据源、服务器端口号application.yml…