Compose-Animation高级别动画

本文介绍了如何在AndroidJetpackCompose中使用AnimatedVisibility实现布局的显隐动画,animateContentSize进行内容尺寸变化的平滑过渡,以及Crossfade进行页面切换的柔顺动画。同时,展示了如何检测列表滚动方向以控制FAB的显示,并创建了一个顶部气泡下弹的通知效果。

前言

AnimatedVisibility 驱动可视性相关动画,即布局显隐
animateContentSize 内容变换动画相关
Crossfade 布局(或者页面)切换过渡动画


AnimatedVisibility

需求:插入 FAB(浮动按钮)到 scaffold 布局内,我们需要当列表向下滑动时 FAB 自动收起,向上滑动时展开

完整实现流程:

  1. scaffold 定义状态,检测 lazycolumn 滚动方向
  2. 根据滚动方向来动态指定 extend 变量是否为 true
  3. 将 extend 变量传递给 FAB 函数,动态显隐文本
  4. 结束

isScrollingUp

再开始工作之前,需要为 LazyListState 自己编写一个扩展方法 isScrollingUp,用来检测当前滚动方向

@Composable
private fun LazyListState.isScrollingUp(): Boolean {
   
   
    var previousIndex by remember(this) {
   
    mutableStateOf(firstVisibleItemIndex) }
    var previousScrollOffset by remember(this) {
   
    mutableStateOf(firstVisibleItemScrollOffset) }
    return remember(this) {
   
   
        derivedStateOf {
   
   
            if (previousIndex != firstVisibleItemIndex) {
   
   
                previousIndex > firstVisibleItemIndex
            } else {
   
   
                previousScrollOffset >= firstVisibleItemScrollOffset
            }.also {
   
   
                previousIndex = firstVisibleItemIndex
                previousScrollOffset = firstVisibleItemScrollOffset
            }
        }
    }.value
}

FAB

定义一个 FAB 组件,使用 FloatingActionButton 可以便于自定义

AnimatedVisibility 函数可以使得组件显隐过渡平滑,且能根据 API 自定义显隐过程的持续时间以及过程
最简单的使用方法是将其包裹你想要动态显隐的组件,并使用 visible 属性控制显隐

@Composable
private fun HomeFloatingActionButton(
    // 是否显隐,由上级scaffold定义
    extended: Boolean,
    onClick: () -> Unit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhillerDev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值