일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 로그캣 색상변경
- Android10
- retrieveExplicitStyle
- 앱강종현상
- 고유식별자
- lottieAnimation
- 투명도 hex값
- 안드로이드
- target29
- 안드로이드apk변환
- Android OS 10
- Android
- 로그캣 색상지정
- BottomNavigation
- Android Bluetooth
- aab파일apk변환
- Opacity Hex
- targetSDK29
- 안드로이드 디버깅툴
- 로띠애니메이션
- 바텀네비게이션
- 디바이스ID
- svn체크아웃
- 안드로이드 로그캣
- 앱강종
- apk변환
- Bluetooth 스캔
- bottomNavigation animation
- 안드로이드aab변환
- 바텀네비
Archives
- Today
- Total
공부하는 다락방
[Kotlin] BottomNavigation With Lottie 본문
class MainActivity : AppCompatActivity(),
BottomNavigationView.OnNavigationItemSelectedListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
binding.bottomNavi.menu.apply {
add(Menu.NONE, 0, Menu.NONE, "brand")
add(Menu.NONE, 1, Menu.NONE, "category")
add(Menu.NONE, 2, Menu.NONE, "home")
findItem(0).icon = getLottieDrawable(
LottieAnimation.BRAND,
binding.bottomNavi
)
findItem(1).icon = getLottieDrawable(
LottieAnimation.CATEGORY,
binding.bottomNavi
)
findItem(2).icon = getLottieDrawable(
LottieAnimation.HOME,
binding.bottomNavi
)
// 최초 진입시 아이콘 선택된 상태로 보이기 위해 설정
val homeIcon = findItem(2).icon as? LottieDrawable
homeIcon?.playAnimation()
}
binding.bottomNavi.setOnNavigationItemSelectedListener(this)
}
override fun onNavigationItemSelected(item: MenuItem): Boolean {
Log.e(TAG, "item.id ==> ${item.itemId}")
binding.bottomNavi.menu.apply {
brandIcon = findItem(0).icon as? LottieDrawable
categoryIcon = findItem(1).icon as? LottieDrawable
homeIcon = findItem(2).icon as? LottieDrawable
}
// item 클릭시 lottie 애니메이션 재생
val icon = item.icon as? LottieDrawable
icon?.apply {
playAnimation()
}
when (item.itemId) {
// brand
0 -> {
navController.navigate(R.id.brandFragment)
// 해당하는 itemId를 제외한 나머지 lottie 애니메이션 취소
categoryIcon?.progress = 0.0f
categoryIcon?.cancelAnimation()
homeIcon?.progress = 0.0f
homeIcon?.cancelAnimation()
}
// category
1 -> {
navController.navigate(R.id.searchFragment)
// 해당하는 itemId를 제외한 나머지 lottie 애니메이션 취소
brandIcon?.progress = 0.0f
brandIcon?.cancelAnimation()
homeIcon?.progress = 0.0f
homeIcon?.cancelAnimation()
}
// home
2 -> {
navController.navigate(R.id.homeFragment)
// 해당하는 itemId를 제외한 나머지 lottie 애니메이션 취소
brandIcon?.progress = 0.0f
brandIcon?.cancelAnimation()
categoryIcon?.progress = 0.0f
categoryIcon?.cancelAnimation()
}
}
return true
}
private fun getLottieDrawable(
animation: LottieAnimation,
view: BottomNavigationView
): LottieDrawable {
return LottieDrawable().apply {
val result = LottieCompositionFactory.fromAssetSync(
view.context.applicationContext, animation.value
)
callback = view
composition = result.value
}
}
enum class LottieAnimation(val value: String) {
BRAND("brand.json"),
CATEGORY("category.json"),
HOME("home.json")
}
}
BottomNavigation 에 Lottie 애니메이션 적용하는데 엄청 애를먹었다..
BottomNavi에 연결된 Menu Item icon에 Lottie 애니메이션 적용하는 부분이 제일 핵심이다.
* 참고
'Android' 카테고리의 다른 글
Opacity 투명도 Hex값 (0) | 2022.03.17 |
---|---|
Android 10(target SDK 29) does not meet the requirements to access device identifiers. (1) | 2020.03.13 |
retrieveExplicitStyle NullPointerException Android 10 (0) | 2020.03.12 |
.aab to .apk 변환 (0) | 2020.03.09 |
알림채널(Notification Channel) (0) | 2018.09.07 |
Comments