본문 바로가기

Android

(39)
[Android] Compose Scrollable Column에서 처음 보여지는 타이밍 캐치하기 들어가는 글신규 기능으로 매출 분석을 차트, 막대 그래프 등 시각적으로 표현하는 기능을 개발하게 되었습니다.평소 토스의 인터랙션과 애니메이션에 관심이 많았기에 소비 분석 화면을 참고해보기로 했습니다.소비 분석엔 카테고리별 소비, 일별 소비, 월별 소비, 고정 지출 등 다양한 분석이 Column에 나열되어 있습니다.막대그래프의 높이 애니메이션, 원그래프의 애니메이션은 Column을 스크롤해 화면에 표시되는 순간 시작하게 됩니다.토스처럼 Scrollable Column에서 화면에 보여졌을 때 애니메이션이 시작되길 원했습니다.처음에는 LazyColumn을 사용해봤지만 하단을 갔다가 상단을 갔을 때 애니메이션이 다시 시작되는 문제가 있었고, debug 환경에서 프레임이 떨어지는 현상도 있어 일반 Column을 ..
[Android] Fragment.rootFragment extension property val Fragment.rootFragment: Fragment get() = parentFragment?.rootFragment ?: this Fragment가 여러 개 쌓여있는 상황일 때 가장 최상단 Fragment를 반환한다. 재귀방식으로 구현해 봤으며, RootFragment 레벨에서 ViewModel 공유가 필요할 때 사용할 수 있다. class TestFragment: Fragment() { private val testViewModel: TestViewModel by viewModels(ownerProducer = { rootFragment }) } fun Fragment.findRootFragment(predicate: (Fragment) -> Boolean): Fragment { retu..
[Android] Compose Flow.collectAsState() 파악하기 Compose에서 Flow를 State로 변환할 때 collectAsState()를 사용한다. Compose Extension 들의 구현을 알면 Compose에 대한 이해도도 키울 수 있을 것 같아 파악해보려 한다. fun Flow.collectAsState(): State @Composable fun Flow.collectAsState( initial: R, context: CoroutineContext = EmptyCoroutineContext ): State = produceState(initial, this, context) { if (context == EmptyCoroutineContext) { collect { value = it } } else withContext(context) { co..
[개발 정보] 코틀린 코루틴 레시피(활용법) https://kt.academy/article/cc-recipe
[Android] Gson을 대체하는 Moshi 주의! 본 포스팅은 ChatGPT를 통해 만들었습니다 Caution! This Posting was made with ChatGPT Moshi란? Moshi는 Square에서 개발한 JSON 파서 라이브러리입니다. Gson과 유사하지만, 성능이 더 빠르고 코틀린과의 호환성이 더 높은 특징을 가지고 있습니다. Moshi는 자바 및 안드로이드 앱과 함께 사용할 수 있습니다. 장점 목록 Moshi는 Gson보다 더 빠릅니다. Moshi는 코틀린과의 호환성이 더 높습니다. Moshi는 직렬화 및 역직렬화를 보다 쉽게 할 수 있습니다. Moshi는 유연성이 높아 사용자 정의 형식을 처리하기 쉽습니다. Gson과의 차이 Moshi는 성능이 더 빠릅니다. Moshi는 코틀린과의 호환성이 더 높습니다. Moshi는 J..
[Android] Hilt: Dependency Injection Made Easy 주의! 본 포스팅은 ChatGPT를 통해 만들었습니다 Caution! This Posting was made with ChatGPT Using Hilt for Dependency Injection in Android As your Android app grows in complexity, you may find yourself dealing with dependencies between classes that are hard to manage and test. One solution to this problem is to use a dependency injection (DI) framework to help manage your dependencies and make your code more modu..
[Android] ProgressBar setIndeterminateDrawable 오류 setIndeterminateDrawable을 하니 ProgressBar가 멈추는 문제가 있었다. 아래와 같이 작성하니 동작했다 progress.indeterminateDrawable = ContextCompat.getDrawable(this, R.drawable.progress)?.apply { setBounds(0, 0, progress.width, progress.height) } progress.visibility = View.GONE progress.visibility = View.VISIBLE 소스코드 안을 봐도 postInvalidate와 drawable 변경 코드들이 들어가 있는데 이상한 것 같다.
[Android] Dagger & Hilt ViewModelFactory Dagger를 통해 DI 구현 중 ViewModelProvider.Factory를 의존성 주입하여 구현하는 방법을 정리해본다. 코드들은 Kotlin으로 작성했다. import androidx.lifecycle.ViewModel import dagger.MapKey import java.lang.annotation.* import java.lang.annotation.Retention import java.lang.annotation.Target import kotlin.reflect.KClass @Documented @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @MapKey annotation class ViewModelKey(val ..