본 포스팅은 DroidKaigi 2017 ~ 実践アニメーション 을 기본으로 번역하여 작성했습니다
제 일본어 실력으로 인하여 오역이나 오타가 발생할 수 있습니다.
~ 복잡한 애니메이션을 향한 방법 ~
Naoya Yunoue
PDF에 OOP를 포함되어 있으므로, 다운로드 후 LibreOffice로 열면 애니메이션 gif가 움직입니다
샘플 코드
https://github.com/citrous/practicalanimation
자기소개와 이 강의에 대해서
Naoya Yunoue
주식회사 septeni original 에서 “GANMA!”라는 만화 앱 개발에 종사
Android도 Scala도 쓰고 있습니다
Android 애니메이션, 어떻게 해야 할까?
애니메이션 이미지 데이터가 있다면 문제없다!
없다면, 어떻게 만들 것인가?
복잡한 애니메이션을 구현할 때에 어떤 방법이 존재하는가 소개합니다
view.animate().translationX(128).translationY(128).start();
view.animate().scaleX(2.0f).scaleY(2.0f).start();
view.animate().rotation(180f).start();
view.animate().alpha(0f).start();
res/animator에 AnimatorSet 리소스를 만든다
다른 View에도 사용할 수 있다
ObjectAnimator를 사용해 VectorDrawable을 애니메이션 시킨다
https://romannurik.github.io/AndroidIconAnimator/
Google의 Roman Nurik씨가 만든 신급 도구
작성한 애니메이션 아이콘을 xml로 추출 가능
애니메이션 아이콘을 간단하게 작성 가능하다
프리뷰버전이지만 실용성은 충분
애니메이션시킬 대상이 늘어나면 어렵다…
이런 애니메이션은?
여기에서부터 본론입니다
ValueAnimator + CustomView 만능설
여기에서 지정한 시간내에
animator.setDuration(ANIMATION_DURATION);
여기에서 지정한 값이 0 ~ 지정한값까지 바뀐다
animator.setFloatValue(100f);
ValueAnimator animator = new ValueAnimator();
animator.setFloatValue(100f);
animator.setDuration(ANIMATION_DURATION);
animator.setInterpolator(new AccelerateInterpolator());
처음은 천천히 후반 가속이라든지, 처음과 마지막에 천천히라든가
값이 갱신된 타이밍에 View를 갱신해준다
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
invalidate();
}
});
View의 onDraw()에서 ValueAnimator의 값을 기준으로 도형을 그린다
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (animator.isRunning()) {
float value = (float) animator.getAnimatedValue("");
drawPhotons(canvas, value);
}
}
X 좌표 = value * 랜덤 수치 1 + A
Y 좌표 = (value * 랜덤 수치 2)^2 - 2(랜덤수치 2 * 랜덤수치 3) + A
랜덤 수치 : 애니메이션 시작시에 생성
value: ValueAnimator에서 얻을 수 있는 값
A: View의 중심까지의 좌표
멋진 Android 애니메이션 생활을 즐겨주세요
comments powered by Disqus
Subscribe to this blog via RSS.
LazyColumn/Row에서 동일한 Key를 사용하면 크래시가 발생하는 이유
Posted on 30 Nov 2024