[kotlin] 아키텍처 컴포넌트를 활용한 애니메이션 구현

안녕하세요! 이번에는 코틀린을 사용하여 안드로이드 앱에서 아키텍처 컴포넌트를 활용하여 애니메이션을 구현하는 방법에 대해 알아보겠습니다.

목표

우리의 목표는 ViewModel, LiveData, ViewBindingObjectAnimator를 활용하여 사용자 인터페이스의 애니메이션을 부드럽게 만드는 것입니다.

단계별 가이드

1. 의존성 추가

우선 build.gradle 파일에 아래 의존성을 추가합니다:

implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
implementation "androidx.lifecycle:lifecycle-common-java8:2.3.1"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.3.1"

2. ViewModel 및 LiveData 설정

ViewModel을 설정하고 애니메이션 상태를 나타내기 위한 LiveData를 만듭니다. 예를들어 AnimationViewModel을 만들고 그 안에 isAnimating이라는 LiveData를 만들 수 있습니다.

class AnimationViewModel : ViewModel() {
    val isAnimating = MutableLiveData<Boolean>(false)
}

3. XML 레이아웃에 ViewBinding 설정

XML 레이아웃에서 ViewBinding을 설정하고 애니메이션을 적용할 뷰들을 바인딩해줍니다.

<LinearLayout
    ...
    android:id="@+id/animatedView"
    ... />

4. 애니메이션 구현

ViewModel에서 LiveData를 관찰하여 애니메이션을 실행하거나 중지할 수 있습니다. ObjectAnimator를 사용하여 애니메이션을 설정하고 시작하거나 중지하는 데에 LiveData를 사용할 수 있습니다.

class AnimationActivity : AppCompatActivity() {
    private lateinit var binding: ActivityAnimationBinding
    private lateinit var viewModel: AnimationViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityAnimationBinding.inflate(layoutInflater)
        setContentView(binding.root)

        viewModel = ViewModelProvider(this).get(AnimationViewModel::class.java)

        viewModel.isAnimating.observe(this, { isAnimating ->
            if (isAnimating) {
                startAnimation()
            } else {
                stopAnimation()
            }
        })

        binding.animatedView.setOnClickListener {
            viewModel.isAnimating.value = !(viewModel.isAnimating.value ?: false)
        }
    }

    private fun startAnimation() {
        val objectAnimator = ObjectAnimator.ofFloat(binding.animatedView, "rotation", 0f, 360f)
        objectAnimator.duration = 1000
        objectAnimator.start()
    }

    private fun stopAnimation() {
        // 애니메이션을 중지하는 코드를 여기에 추가합니다.
    }
}

이제 위의 단계를 따라하면 ViewModel, LiveData 및 ViewBinding을 사용하여 부드럽고 간단한 애니메이션을 구현할 수 있습니다.

요약

이번 튜토리얼에서는 코틀린을 사용하여 안드로이드 앱에서 아키텍처 컴포넌트를 활용하여 애니메이션을 구현하는 방법에 대해 살펴보았습니다. ViewModel, LiveData, ViewBinding 및 ObjectAnimator를 활용하여 사용자 인터페이스의 애니메이션을 부드럽게 만들 수 있습니다.

참고: Android Developers - View Binding