Compose笔记(六十七)--LookaheadScope

这一节主要了解一下Compose中的LookaheadScope,在Jetpack Compose开发中,LookaheadScope是一个高级动画与布局预测工具,用于在布局尚未真正发生变更前,提前"预测"未来布局状态,从而实现更流畅、响应更快的动画效果。简单总结如下:

场景:

1 列表项删除时的平滑收缩动画

2 共享元素过渡

栗子:

Kotlin 复制代码
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.LookaheadScope
import androidx.compose.ui.unit.dp

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun LookaheadDemo() {
    var expanded by remember { mutableStateOf(false) }

    LookaheadScope {
        Column(
            modifier = Modifier
                .fillMaxWidth()
                .padding(16.dp)
        ) {
            Button(
                onClick = { expanded = !expanded },
                modifier = Modifier.fillMaxWidth()
            ) {
                Text(if (expanded) "Collapse" else "Expand")
            }

            Spacer(modifier = Modifier.height(16.dp))

            Box(
                modifier = Modifier
                    .fillMaxWidth()
                    .height(if (expanded) 200.dp else 100.dp)
                    .background(Color.Blue)
            )
        }
    }
}
Kotlin 复制代码
mport androidx.compose.animation.core.animateDpAsState
import androidx.compose.animation.core.tween
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.LookaheadScope
import androidx.compose.ui.unit.dp

@Composable
fun LookaheadScopeDemo() {
 
    var isLargeSize by remember { mutableStateOf(false) }
  
    val targetSize by animateDpAsState(
        targetValue = if (isLargeSize) 200.dp else 100.dp,
        animationSpec = tween(durationMillis = 500),
        label = "size animation"
    )

    Box(
        modifier = Modifier.fillMaxSize(),
        contentAlignment = Alignment.Center
    ) {
        LookaheadScope {
            Box(
                modifier = Modifier
                    .size(targetSize)
                    .background(MaterialTheme.colorScheme.primary, MaterialTheme.shapes.medium),
                contentAlignment = Alignment.Center
            ) {
                Text(
                    text = if (isLargeSize) "大尺寸" else "小尺寸",
                    color = MaterialTheme.colorScheme.onPrimary
                )
            }
           
            Button(
                onClick = { isLargeSize = !isLargeSize },
                modifier = Modifier.padding(top = 300.dp)
            ) {
                Text(text = "切换组件尺寸")
            }
        }
    }
}

注意:

1 实验性API:需添加 @OptIn(ExperimentalMaterial3Api::class)。

2 适用场景:主要用于Material 3组件或自定义动态布局。

相关推荐
aqi0014 小时前
鸿蒙版本的电子书阅读APP开放源码啦
android·华为·ai编程·harmonyos·鸿蒙
墨天梦14 小时前
B19_SunnyWeather到阅读客户端
android·kotlin
美狐美颜sdk15 小时前
直播APP源码可以直接接入视频美颜sdk吗?技术方案详解
android·人工智能·音视频·美颜sdk·直播美颜sdk
qq_2842740516 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
qq_2842740517 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
用户693717500138418 小时前
2026,程序员的时代拐点到了
android·前端·后端
Titan202418 小时前
MySQL访问个人学习笔记
笔记·学习·mysql
深圳老胡20 小时前
STM32CubeMX 生成 CMake 工程,用 VSCode 编译与调试的完整流程
笔记·stm32·单片机·代码规范
坤坤子吖20 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
浪潮IT馆20 小时前
Android Studio 非最新版本下载安装教程
android·ide·android studio