Jetpack Compose의 Animated Visibility에 대한 심층 분석
19845 단어 AndroidKotlinJetpack Composetech
개시하다
Editable(Boolean)에서 애니메이션 실행하기
@ExperimentalAnimationApi
@Composable
fun AnimatedVisibilitySample() {
var editable by remember { mutableStateOf(true) }
Column(modifier = Modifier.padding(8.dp)) {
Text(
text = "AnimatedVisibility",
style = MaterialTheme.typography.h6
)
AnimatedVisibility(visible = editable) {
Surface(
color = Color.Yellow,
modifier = Modifier
.fillMaxWidth()
.height(100.dp)
.align(Alignment.CenterHorizontally)
.padding(8.dp)
) {}
}
Button(
onClick = { editable = !editable },
modifier = Modifier.fillMaxWidth()
) {
Text(text = "Toggle")
}
}
}
MutableTransitionState에서 애니메이션 실행
@ExperimentalAnimationApi
@Composable
fun AnimatedVisibilityStateSample() {
val state = remember {
MutableTransitionState(false).apply {
targetState = true
}
}
Column(modifier = Modifier.padding(8.dp)) {
Text(
text = "AnimatedVisibilityState",
style = MaterialTheme.typography.h6
)
AnimatedVisibility(visibleState = state) {
Surface(
color = Color.Yellow,
modifier = Modifier
.fillMaxWidth()
.height(100.dp)
.align(Alignment.CenterHorizontally)
.padding(8.dp)
) {
Text(
text = state.getAnimationState().toString()
)
}
}
Button(
onClick = { state.targetState = !state.currentState },
modifier = Modifier.fillMaxWidth()
) {
Text(text = "Toggle")
}
}
}
// 今回はこのような拡張関数を用意してみた、すると簡単にアニメーション状態が取得できる
enum class AnimState {
VISIBLE,
INVISIBLE,
APPEARING,
DISAPPEARING
}
fun MutableTransitionState<Boolean>.getAnimationState(): AnimState {
return when {
this.isIdle && this.currentState -> AnimState.VISIBLE
!this.isIdle && this.currentState -> AnimState.DISAPPEARING
this.isIdle && !this.currentState -> AnimState.INVISIBLE
else -> AnimState.APPEARING
}
}
표시/숨기기 애니메이션 추가 가능
@ExperimentalAnimationApi
@Composable
fun AnimatedVisibilityEnterExitSample() {
val state = remember {
MutableTransitionState(false).apply {
targetState = true
}
}
Column(modifier = Modifier.padding(8.dp)) {
Text(
text = "AnimatedVisibilityState",
style = MaterialTheme.typography.h6
)
AnimatedVisibility(
visibleState = state,
enter = fadeIn(),
exit = fadeOut()
) {
Surface(
color = Color.Yellow,
modifier = Modifier
.fillMaxWidth()
.height(100.dp)
.align(Alignment.CenterHorizontally)
.padding(8.dp)
) {
Text(text = state.getAnimationState().toString())
}
}
Button(
onClick = { state.targetState = !state.currentState },
modifier = Modifier.fillMaxWidth()
) {
Text(text = "Toggle")
}
}
}
끝말
참고 문헌
Reference
이 문제에 관하여(Jetpack Compose의 Animated Visibility에 대한 심층 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kaleidot725/articles/f66551da64669b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)