반응형
애니메이션의 종류
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등 모든 것에 애니메이션을 적용할 수 있다.
- 커스터마이징을 극대화 할 수 있다.
반응형
'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 |