728x90
반응형
LazyColumn, LazyRow의 특징 및 사용
LazyColumn, LazyRow 특징스크롤 가능한 리스트내부적으로 Cloumn, Row과 비슷, 스크롤 기능이 내장됨별도의 ScrollView 없이 리스트 생성 가능지연(Lazy) 로딩 최적화화면에 보이는 항목만 렌더링 하며, 보
joyshu93.tistory.com
지난번에 만든 목록에 UI 애니메이션을 추가하려고 한다
animateDpAsState
animateDpAsState 컴포저블은 애니메이션이 완료될 때까지 애니메이션에 의해 객체의 value가 계속 업데이트되는 상태 객체를 반환한다
적용 코드
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier, names: List<String> = listOf("World", "Compose")) {
var expanded by rememberSaveable { mutableStateOf(false) }
val extraPadding by animateDpAsState( // animateDpAsState 추가
if (expanded) 48.dp else 0.dp,
animationSpec = spring( //animationSpec 사용
dampingRatio = Spring. DampingRatioMediumBouncy, // 바운스 효과
stiffness = Spring.StiffnessLow // 부드러운 움직임
)
)
Surface(
color = MaterialTheme.colorScheme.primary,
modifier = modifier.padding(vertical = 4.dp, horizontal = 8.dp)) {
Row(modifier = Modifier.padding(24.dp)) {
Column(modifier = Modifier
.weight(1f)
.padding(bottom = extraPadding.coerceAtLeast(0.dp))) { // coerceAtLeast 최소값 보정
Text(text = "Hello")
Text( text = "$name")
}
ElevatedButton(onClick = { expanded = !expanded }) {
Text(if (expanded) "Show less" else "Show more")
}
}
}
}
- Spring 애니메이션을 사용해서 부드럽고 자연스러운 효과를 주었다
- padding값이 음수가 되는 것을 방지하기 위해 coerceAtLeast 보정을 사용했다
결과
728x90
반응형
'안드로이드 학습(Compose)' 카테고리의 다른 글
버튼을 아이콘으로 대체, 문자열 리소스 사용 (0) | 2025.03.05 |
---|---|
앱의 스타일 지정 및 테마 설정 (0) | 2025.03.05 |
기기 회전과 상태 유지 (0) | 2025.03.04 |
LazyColumn, LazyRow의 특징 및 사용 (0) | 2025.03.04 |
상태 호이스팅 (0) | 2025.03.04 |