Animation

java.lang.Object
  ↳  android.view.animation.Animation
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="int"
     android:fillAfter="boolean"
     android:fillBefore="boolean"
     android:fillEnabled="boolean"
     android:repeatCount="int"
     android:repeatMode="restart/reverse"
     android:startOffset="int"
     android:zAdjustment="normal/top/bottom">
    ...
</set>
android:duration 애니메이션 지속시간 (1/1000초)
android:fillAfter true일 때, 애니메이션 효과가 끝난 후에도 상태를 유지한다. default false
android:fillBefore true일 때, 애니메이션이 시작되기 전에 애니메이션 변형이 적용된다
android:fillEnabled true일 때, fillBefore 값을 고려
android:interpolator 애니메이션이 일어나는 동안 횟수, 속도 조절 또는 효과 추가
android:repeatCount 애니메이션 반복 횟수. 0 ~ infinite 무한반복. default 0
android:repeatMode 반복 모드. restart: 애니메이션을 처음부터 다시 시작, reverse: 애니메이션을 거꾸로 진행
android:startOffset 애니메이션 시작 전 대기시간 (1/1000초)
android:zAdjustment 애니메이션이 실행될 때 Z축 중심으로 정렬





Tween Animation

간단한 애니메이션
동작, 모양 변경과 같은 효과를 준다.
AnimationUtils 클래스의 loadAnimation을 호출하여 두 번째 매개 변수에 애니메이션 xml을 지정한다.
Animation anim = AnimationUtils.loadAnimation(this, R.anim.myanimation);



File Location

res/anim/filename.xml

애니메이션을 정의한 xml 파일들은 res/anim 폴더 안에 위치시킨다.
기본적으로 anim 폴더는 프로젝트 내에 없기 때문에 따로 만들어 사용한다.



Syntax
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>



set

set 태그로 여러 애니메이션들을 묶는다.
android:shareInterpolator true일 경우, 하위 애니메이션에 같은 interpolator를 공유한다.



alpha

투명도 애니메이션
알파값은 0.0 ~ 1.0 까지의 범위를 갖는다.
0.0 은 완전 투명, 1.0은 완전 불투명이다.
android:fromAlpha 시작 투명도 값
android:toAlpha 종료 투명도 값



scale

확대/축소 애니메이션
크기는 0.0 ~ 1.0의 범위를 갖는다. (0% ~ 100%)
1.0은 원래 크기.
android:fromXScale 애니메이션 시작 시 가로 크기
android:toXScale 애니메이션 종료 시 가로 크기
android:toYScale 애니메이션 종료 시 세로 크기
android:fromYScale 애니메이션 시작 시 세로 크기
android:pivotX 크기 변화 중심점의 X좌표
android:pivotY 크기 변화 중심점의 Y좌표



translate

이동 애니메이션.
위치 좌표는 접미어에 따라 기준이 달라 진다.
접미어 기준
없음 절대값
% 객체
%p 객체의 부모
android:fromXDelta 처음 시작될 때 View의 X 위치
android:toXDelta 끝날 때 X위치. 좌우 이동
android:fromYDelta 처음 시작될 때 View의 Y 위치
android:toYDelta 끝날 때 Y위치. 상하 이동



rotate

회전 애니메이션.
android:fromDegrees 회전을 시작하는 각도
android:toDegrees 회전을 끝내는 각도
android:pivotX 회전축의 X 좌표
android:pivotY 회전축의 Y 좌표



Interpolators

미리 정의된 애니메이션의 설정을 사용할 수 있다.
accelerate_interpolator 점점 빠르게 진행한다
decelerate_interpolator 점점 느리게 진행한다
accelerate_decelerate_interpolator accelerate/decelerate를 동시에 적용한다
anticipate_interpolator 시작위치에서 조금 뒤로 당겼다 이동한다
overshoot_interpolator 도착 위치를 조금 지나친 후 도착 위치로 이동한다
anticipate_overshoot_interpolator anticipate/ overshoot 동시적용 된다
bounce_interpolator 도착 위치에서 튕긴다
cycle_interpolator 애니메이션을 반복한다
linear_interpolator 일정하게 진행한다





Example


alpha.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:duration="10000"
       android:fromAlpha="0.0"
       android:toAlpha="1.0"/>


MainActivity.java
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;

public class MainActivity extends Activity {
    Animation anim;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void alpha(View v) {
        anim = AnimationUtils.loadAnimation(this, R.anim.alpha);
        v.startAnimation(anim);
    }
}


activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:gravity="center"
              android:orientation="vertical">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="alpha"
        android:text="Alpha"/>

</LinearLayout>





•  참고: Animation Resources