안드로이드 애니메이션에 대한 전반적인 정리(추후 업데이트 예정)
스파크를 진행하며 애니메이션에대한 필요성을 느끼고 연주의 도움을 받아 애니메이션을 적용해 보았다.
애니메이션이 앱의 완성도를 많이 올려줄수있다는 것에 애니메이션을 제대로 공부해보고자 했는데 안드로이드에서 제공하는 애니메이션의 종류가 너무많아 이번 글에서는 전반적인것들을 정리하고 추후에 종류별로 필요한것들의 사용법을 자세히 정리하면서 넘어갈 예정이다.
우선 오늘은 개론같이 대략적인 정리이다.
애니메이션을 안드로이드에서 다루는 방법은 많다
Animator,Animated Vector Drawable,physics,Transitions Api,MotionLayout 등등이 있다 현재는 Animator에 관련된 것들만 사용해봤고 추후에 사용하고 공부하는대로 업데이트 해나갈 예정이다.
이제 각각 살펴보자.
1.Animmator
일단 안드로이드에서는 애니메이션 기능을 위해 Animator라는 클래스를 제공한다
그안에는 다양한 애니메이터들이 있고 그것들은 서로 뭐 상속관계이고, 참조 하기도 하고 뭐 기타등등 난리도 아니다.
이 부분에 대해서는 사용하다 보면 차차 익숙해 지고 알게 될꺼라 생각해서 우선은 관계에대한 이미지를 하나 첨부하고 넘어가도록 하겠다.
이 이미지를 대충설명해보자면 animator 을 valueAnimator가 상속받고있고 그걸 objectAnimator가 상속받으며 따로 AnimatorSet가 Animator를 상속받고있다
또한 ObjectAnimator를 사용할때 하나의 ObjectAnimator안에서 여러가지 Animation을 동시에 사용하기위해
PropertyValueHolder를 사용한다 -> ObjectAnimator의 글을 본다면 이해할수있을것이다.
이런식으로 Animator에는 많은 Animation을 적용시킬수있는 Animator가 있는데 과연 무엇을 사용해야 적재적소에 사용하는 것인지에 대해 대략적으로 적어보겠다.
Animator에 대해 구글링을 하다보면 꼭 나오는 이미지가 하나있다.
바로 이거인데 각각 Animator들에 있는 지원하는 기능들을 통해 장단점을 비교해서 적절한 애니메이터를 사용할수 있도록 나온표이다.
이걸보면 뭔가 애니메이터가 5개씩이 되어서 정말 복잡해 보이고 머리아픈데 정리해보면 결국 3가지로 정리되기에 별거아니다.
우선 큰분류로
Value Animator는 전체를 다가지고있는 모든부분을 커스텀할수있는 가장 기본적인(광범위한) 애니메이터 클래스라고 생각하면된다.
그리고 ValueAnimator 를 상속하고있는 ObjectAnimator가있는데 ObjectAnimator에서 연쇄적인 애니메이션 작업을 하기위해 Animator set을 이용하는것이고 한번에 여러개의 애니메이션을 동시에 사용하기위해 Property Value Holder를 사용한다고 생각하면된다 그러므로 사실상 Object Animator, Animator set, Property Value Holder 는 한세트나 다름없다 묶어서 생각하면 편하다
ViewPropertyAnimator은 아주 간소화된 애니메이션을 만들기위해 따로 빼놓은것이라고 생각하면된다.
자 이제 각각이 언제 사용해야하는지를 간단하게 살펴보겠다.
1-1.View Property Animator
아주 간단한 애니메이션을 만들고싶다면 사용하자(Object Animator객체 만들고 뭐하고 하기 귀찮을만큼 간단한거)
뷰하나에서 동작하는 애니메이션이고 repeat,reverse,play together같은 복합적인 애니메이션이 아니라면 ViewPopertyAnimator로도 충분하다.
ViewPopertyAnimator에 관한글( 추후업데이트)
1-2.Object Animator(Animator set, Property Value Holder 를 포함한)
난 스파크에 이걸 적용했다 이걸로 왠만한거 다할수있기에 급하다면 그냥 이것만 공부해라.
그냥 Object Animator만 사용한다면 하나의 뷰에서 간단한 애니메이션을 반복적으로 동작시키거나(repeat)
반대로 돌리거나(reverse) 등등을 시킬수있다.
그리고 xml에다가 정리할수도 코드에다가 직빵으로 만들수 있어서 편하다 -> xml에 애니메이션 정리하는것이 더 코드도 깔끔하고 좋은것같다 진짜 간단한거 아니면
Property Value Holder를 동시에 사용한다면 하나의 뷰에서 여러개의 애니메이션을 동시에 사용할수있다
-> 코드로도 하는데 이거 보기도 싫고 정신없고 걍 xml에 정리해서써라(코드에 직빵으로쓰는거는 단순히 object단일로쓸때만이 좋은거같다 물론 취향이지만)
-> 하나의 뷰에서만 작동하는것이다 그냥 Property Value Holder를 주루룩 늘어놓는다면 동시에 실행되기 때문에 한뷰에서 순차적으로 애니메이션을 돌리고 싶을때는 순차적으로 시킬려면 duration이랑 startOffset를 잘사용한다면 순차적으로 적용할수있을것이다.
AnimatorSet를 사용한다면 하나의 뷰에서 여러개의 애니메이션을 순차적/동시에 실행시키는걸 적용할수있고
코드단에서 AnimatorSet를 적용한다면 여러개의 뷰의 애니메이션의 순서를 정해줄수있다.
->xml에서 단순히 set에 작성하는것은 여러개의 뷰를 조정할수는 없다.
->여러가지 뷰를 동시에 움직이고싶은경우 코드단에서 animatorSet를 통해서 적용시키면 좋다.
https://mccoy-devloper.tistory.com/43
1-3.ValueAnimator
ValueAnimator는 애니메이션의 커스터마이징을 극대화 시키기 위해서 사용한다!!
뷰 또는 객체의 속성이 아닌것에 애니메이션을 적용하려는 경우
가장 기본적인 애니메이터 클래스인 ValueAnimator를 사용해야한다.
ValueAnimator에 관한글(추후 업데이트)
이렇게 Animator가 제공하는것들은 다 살펴보았다.
이제 추가적으로 다른 애니메이션을 구현할수있는 방법들을 살펴보자
2.Animated Vector Drawable
추후 업데이트
3.Physis
추후 업데이트
4.Transitions API
추후업데이트
5.Motion Layout
추후 업데이트
출처:
https://boilerplate.tistory.com/50