Android

안드로이드 애니메이션

show2888 2022. 6. 8. 18:21
반응형

애니메이션의 종류

Animator 종류

Animation클래스 vs Animator클래스
Animation은 Animator의 이전 버전이라 보면된다. 낮은 버전에서는 아직 Animation을 쓰지만 대부분의 앱은 이제 Animator를 쓰는 추세다.

ViewPropertyAnimator

특징)

  • 하나의 뷰에서만 애니메이션이 동작하길 원하고 간단한 애니메이션을 만들때 사용
  • 반복적, 순차적, 동시적인 애니메이션 구현 불가

 

사용)

View의 aniamte()메소드를 통해 ViewPropertyAnimator를 return한다.

   binding.textView.animate()
            .scaleX(0.5f)
            .scaleY(0.5f)
            .setDuration(3000)
            .withStartAction { } //애니메이션 시작시
            .withEndAction { } //애니메이션 끝날시

 

ObjectAnimator

특징)

  • ValueAnimator의 subClass이다.
  • 하나의 뷰에서 간단하고 반복적인 애니메이션을 구현할때 사용
  • XML을 이용해 애니메이션 생성 가능
  • 순차적, 동시적인 애니메이션 구현 불가

 

사용)

  • ObjectAnimator 클래스의 ofFlaot, ofInt, ofObject, ofArgb 등등 을 사용해 값을 계산하는 단위를 지정한다.
val anim = ObjectAnimator.ofFloat(binding.textView, "translationY", 300f)
anim.repeatCount = 10
anim.start()
  • res/animator안에 objectAnimator XML을 생성한다.
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:valueFrom="0"
        android:valueTo="180"
        android:propertyName="rotationY"
        android:duration="1000"
        />
</set>
val set = AnimatorInflater.loadAnimator(this,R.animator.test)
set.setTarget(binding.textView)
set.start()

 

PropertyValueHolders

특징)

  • 하나의 뷰에서 여러 애니메이션을 동시에 실행가능
  • 리플렉션을 통해 모든 뷰객체의 속성(color,size 등)을 사용가능
  • XML로 애니메이션 생성가능

사용)

  • PropertyValuesHolder들로 애니메이션을 만든뒤 ObjectAnimator에 ofPropertyValuesHolder() 메소드를 이용해 Holder들을 추가한다.
val aniColor = PropertyValuesHolder.ofInt(
    "textColor",
    Color.parseColor("#FFFFFF"),
    Color.parseColor("#FF018786")
)
val aniSize = PropertyValuesHolder.ofFloat("textSize", 100f)

aniColor.setEvaluator(ArgbEvaluator())

val anim = ObjectAnimator.ofPropertyValuesHolder(binding.textView, aniColor, aniSize)
anim.duration = 5000
anim.start()
  • res/animator안에 objectAnimator XML을 생성한다. objectAnimator안에 propertyValuesHolder를 추가한다.
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:duration="5000"
        android:interpolator="@android:interpolator/accelerate_decelerate"
        android:repeatCount="infinite"
        android:repeatMode="reverse">
        <propertyValuesHolder
            android:propertyName="rotationX"
            android:valueFrom="0"
            android:valueTo="3600"
            android:valueType="floatType" />
        <propertyValuesHolder
            android:propertyName="textColor"
            android:valueFrom="#FFFF0000"
            android:valueTo="#FF0000FF"
            android:valueType="colorType" />
    </objectAnimator>
</set>
val set = AnimatorInflater.loadAnimator(this, R.animator.multi_anim_test)
set.setTarget(binding.textView)
set.start()

 

AnimatorSet

특징)

  • 여러개의 뷰를 동시에 애니메이션을 적용할 때 사용
  • 하나의 뷰에 순차적인 애니메이션 적용 가능
  • XML로 구현가능
  • 반복적인 애니메이션 불가능

사용)

  • PropertyValuesHolder들로 애니메이션을 만든뒤 ObjectAnimator에 ofPropertyValuesHolder() 메소드를 이용해 Holder들을 추가한다.
  • AnimatorSet()을 이용해 animaotor()의 순서를 추가한다.
val rotationX = PropertyValuesHolder.ofFloat(
    View.ROTATION_X, 0f, 3600f
)
val textColorX = PropertyValuesHolder.ofInt(
    "textColor",
    Color.parseColor("#FFFF0000"),
    Color.parseColor("#FF0000FF")
)
textColorX.setEvaluator(ArgbEvaluator())

val animator1 =
    ObjectAnimator.ofPropertyValuesHolder(binding.textView, rotationX, textColorX)
animator1.duration = 5000
animator1.interpolator = AccelerateDecelerateInterpolator()

val rotationY = PropertyValuesHolder.ofFloat(View.ROTATION_X, 0f, 3600f)
val textColorY = PropertyValuesHolder.ofInt(
    "textColor",
    Color.parseColor("#FF0000FF"),
    Color.parseColor("#FFFF0000")
)
textColorY.setEvaluator(ArgbEvaluator())

val animator2 =
    ObjectAnimator.ofPropertyValuesHolder(binding.textView, rotationY, textColorY)
animator2.duration = 5000
animator2.interpolator = AccelerateDecelerateInterpolator()

val animatorSet = AnimatorSet()
animatorSet.play(animator2).after(animator1)
animatorSet.start()
InterPolator란?
InterPolation은 보간법 이란뜻으로 지점과 지점사이의 값들을 평균화하는 방법이다. 
이를 이용해 InterPolator는 시작지점과 종료지점까지의 궤적을 어떻게 표현할지 정의하는것이다.

 

ValueAnimator

특징)

  • View가 아닌 Object등 모든 것에 애니메이션을 적용할 수 있다.
  • 커스터마이징을 극대화 할 수 있다.

 

 

 

 

 

출처)
https://dunchi.tistory.com/95

https://www.crocus.co.kr/1690

https://dunchi.tistory.com/95

반응형

'Android' 카테고리의 다른 글

Camera2 API 개념부터 구현까지  (0) 2023.04.06
Android Paging3 개념정리 및 사용기  (0) 2022.07.06
안드로이드 Server’scertificate is not trusted 해결  (0) 2022.06.20
Android Room  (0) 2022.06.15