애니메이션으로 상태 변화나 전환을 설명하거나, 공간 모델을 확립하거나, 주의를 끌 수 있다.

애니메이션은 사용자가 앱을 올바로 이해하고 원하는 화면으로 이동하는데 도움이 된다.

애니메이션이 없는 경우 무엇이 바뀌었는지 설명없이 확 바뀌는 느낌이 든다. 

 

반응형 환경에서 애니메이션을 작성할 때 애니메이션 코드에 필요한 몇가지 특성이 있다.

  • 재진입(Reentrant)
  • 연속(Continuous)
  • 매끄러움(Smooth)

재진입(Reentrant)

애니메이션을 언제든지 중단했다가 다시 호출할 수 있어야 한다는 의미이다. 

새로운 상태 객체가 게시되는 경우, 애니메이션이 실행 중인 동안에도 상태에 맞는 애니메이션이 바인딩 될 수 있도록 애니메이션을 준비해야 한다. 실행중인 애니메이션을 취소 또는 다시 타게팅할 수 있거나, 잠재저긴 역효과를 모두 없앨 수 있어야 한다.


연속 (Continuous)

애니메이션되는 값에 갑작스러운 변화가 생지기 않도록 한다. 

애니메이션을 끝까지 실행하면 모든 모습이 보기 좋지만, 그러지 않고 빠르게 탭하면 애니메이션의 크기와 색상이 불연속적으로 변한다.


매끄러움 (Smooth)

뷰를 상단 오른쪽으로 두 차례 연속으로 빠르게 보내는 경우, 뷰가 중간에서 멈춘 후에 목적지를 향해 천천히 움직이거나, 이동 중간에 목적지를 바꾸면 뷰가 다시 멈추었다가 갑자기 방향을 바꾸는 이런 갑작스러운 정지나 방향 변화는 부자연스러워 보인다. 현실 세계에서는 이런식으로 움직이지 않기 때문이다. 따라서 애니메이션을 계속 매끄럽게 유지하도록 해야 한다.


 

Springterlude

스프링은 '동적 애니메이션' Jetpack 라이브러리의 일부이다. 많은 사람이 매우 탄력있는 애니메이션 예시를 보면서 이 라이브러리를 그냥 건너뛰었을지도 모른다. 이 효과를 유용하게 활용할 수도 있지만, 늘 필요하거나 바람직한 것은 아니라서 그럴 것이다. 하지만 이런 탄력성은 비활성화하고 애니메이션을 중단하고 다시 시작하는 기능 및 일반적인 애니메이션에 유용한 여러가지 속성을 가진 물리애니메이션 시스템으로 사용할 수 있다.

 

스프링 애니메이션으로 구현하면 부드러움 문제가 생기지 않는다는 점을 확인할 수 있다. 

SpringAnimation 작성은 일반적인 애니메이터와 많은 면에서 흡사한데, start()를 호출하는게 아니라 animateToFinalPosition메서드를 사용하는 점이 큰 장점이다. 이 메서드는 애니메이션이 아직 시작되지 않은 경우 애니메이션을 시작하는 역할을 하지만, 애니메이션이 실행 중인 경우에는 애니메이션을 새 목적지로 리타게팅하여 갑자기 변경하지 않고 모멘텀을 유지한다는 점이 중요하다.


Reference

 

 

 

'Android' 카테고리의 다른 글

[안드로이드] 화면전환  (0) 2019.11.22
[안드로이드] 애니메이션2  (0) 2019.11.20
[안드로이드] 패키지명, Color 변경  (1) 2019.11.17
[안드로이드] 기본위젯과 드로어블  (0) 2019.11.16
[Kotlin] TextWatcher  (0) 2019.10.30

+ Recent posts