-
Jetpack Compose Modifier.onFocusChanged에서 animateScrollTo 가 작동안되는 문제Android 2022. 4. 7. 17:21반응형
기존에 TextField 에서 onFocusChanged 가 될때 animateScrollTo를 하는 기능이 있었는데
compose 버전을 1.0.5 에서 1.1.1 로 업데이트하면서
작동이 안되는 문제가 발생하였습니다.
해당문제에 대해서 테스트를 하다보니 animateScrollTo 가 아닌 scrollTo 를 사용하면 정상적으로 스크롤 이동이 가능하여
에니메이션 관련으로 검색중에 해당문제에 대한 힌트를 아래 이슈에서 찾을 수 있었습니다.
https://issuetracker.google.com/issues/212982472
해당현상은 onFocusChanged 가 호출시 Focus내부 에니메이션이 실행되면서 animateScrollTo 에 대한 에니메이션이 강제로 스킵되어 버립니다.
정확히는 bringIntoViewRequester.bringIntoView()가 영향을 끼친다고 하는데
내부에서 animateScrollTo를 호출하는 것으로 예상됩니다.
그래서 해결방법은 약간의 시간 간격을 두고 에니메이션을 재생하면 onFocusChanged 내부의 에니메이션 작동 이후에 animateScrollTo의 에니메이션도 작동되어 정상적으로 이동이 되는것을 확인 되었습니다.
before
...... .onFocusChanged { isFocusedState.value = it.isFocused when { it.isFocused -> { coroutineScope.launch { scrollState?.animateScrollTo(scrollToPosition.toInt()) } onFocusIn() } else -> { onFocusOut() } } } ......
after
...... .onFocusChanged { isFocusedState.value = it.isFocused when { it.isFocused -> { coroutineScope.launch { delay(10) scrollState?.animateScrollTo(scrollToPosition.toInt()) } onFocusIn() } else -> { onFocusOut() } } } ......
[참고링크]
https://issuetracker.google.com/issues/184670295
https://intrepidgeeks.com/tutorial/jetpack-compose-110--change-summary
반응형'Android' 카테고리의 다른 글
2023년 4월 정책 업데이트 Google play 정책 세미나 (0) 2023.04.26 Clean Architecture in Android (0) 2023.01.30 Modern Android App Architecture (0) 2022.12.11 Android studio/InteliJ IDEA Code inspections (0) 2022.09.08 Null Coalescing Operator(with. databinding) (0) 2022.01.05 Modifier in Jetpack Compose (0) 2021.12.15 Android adb 사용 여부 앱에서 확인하는 법 (0) 2021.12.14 Android 12 Splash Screen (스플래시 스크린) (0) 2021.12.09