Android

Android 애니메이션 관련

Machine_웅 2021. 2. 17. 10:15
728x90
반응형

종류 : 

1. 회전 (rotate) : 중심점(pivot)을 기준으로 회전하는 애니메이션

2. 크기 (scale) : 중심점(pivot)을 기준으로 크기가 커지거나 줄어드는 애니메이션

3. 투명도 (alpha) : View가 흐려지거나 다시 진해지는 애니메이션

4. 이동 (translate) : View가 상,하,좌,우로 이동하는 애니메이션

5. 복합 애니메이션 (set) : 여러 애니메이션을 중첩하는 애니메이션

 

 

 

// slide_Up.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator">
    <translate
        android:duration="3000"
        android:fromYDelta="100%"
        android:toYDelta="0">
    </translate>
</set>

android:duration="3000"  //  3초에 걸쳐서 애니메이션 실행

 

// slide_Down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator">
    <translate
        android:duration="3000"
        android:fromYDelta="-100%"
        android:toYDelta="0">
    </translate>
</set>

// slide_Left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromXDelta="-100%"
        android:toXDelta="0">
    </translate>
</set>

// slide_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromXDelta="100%"
        android:toXDelta="0">
    </translate>
</set>

 

// drop_down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:duration="500"
        android:fromXScale="100%"
        android:fromYScale="0"
        android:toXScale="100%"
        android:toYScale="100%"
        >

    </scale>
</set>

 

 

// 적용 방법

        layout_login = findViewById(R.id.layout_login);
        Animation aniSlide = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.slide_up);
        layout_login.startAnimation(aniSlide);

 

 

//안드로드이드  디벨로퍼 예시 

  <?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>
     다른 애니메이션 요소(<alpha>, <scale>, <translate>, <rotate>) 
     또는 기타 <set> 요소를 갖고 있는 컨테이너.
     AnimationSet를 나타냅니다.

 

set속성 :

android:interpolator
    보간 리소스. 애니메이션에서 적용할 Interpolator입니다. 
    값은 보간 클래스 이름이 아닌 보간을 지정하는 리소스 참조여야 합니다. 
    플랫폼에서 제공되는 기본 보간 리소스를 사용하거나 고유한 자체 보간 리소스를 만들 수 있습니다. 
    보간에 관한 자세한 내용은 아래 설명을 참조하세요.

 

android:shareInterpolator
    모든 하위 요소 간에 동일한 보간을 공유하려면 'true'를 설정합니다.

 


<alpha>
    페이드 인 또는 페이드 아웃 애니메이션. AlphaAnimation을 나타냅니다.

 

alpha 속성:
android:fromAlpha
    부동소수점. 시작 불투명도 오프셋으로, 여기서 0.0은 투명이고 1.0은 불투명입니다.


android:toAlpha
    부동소수점. 끝 불투명도 오프셋으로, 여기서 0.0은 투명이고 1.0은 불투명입니다.


<alpha>에서 지원하는 추가 속성은 Animation 클래스 참조

(이 클래스 참조의 모든 XML 속성은 이 요소에 의해 상속됨)를 참조하세요.


<scale>
    크기 조절 애니메이션. pivotX 및 pivotY를 지정하여

    이미지가 바깥쪽(또는 안쪽)으로 커지기 시작하는 이미지의 중심점을 지정할 수 있습니다.

    예를 들어 값이 0, 0(왼쪽 상단)이면 일제히 오른쪽 아래로 커집니다. ScaleAnimation을 나타냅니다.

 

scale 속성:

android:fromXScale
    부동소수점. 시작 X 크기 오프셋으로, 여기서 1.0은 변경이 없다는 뜻입니다.
android:toXScale
    부동소수점. 끝 X 크기 오프셋으로, 여기서 1.0은 변경이 없다는 뜻입니다.
android:fromYScale
    부동소수점. 시작 Y 크기 오프셋으로, 여기서 1.0은 변경이 없다는 뜻입니다.
android:toYScale
    부동소수점. 끝 Y 크기 오프셋으로, 여기서 1.0은 변경이 없다는 뜻입니다.
android:pivotX
    부동소수점. 객체가 확장될 때 고정된 상태로 유지되는 X 좌표입니다.
android:pivotY
    부동소수점. 객체의 크기가 확장될 때 고정된 상태로 유지되는 Y 좌표입니다.

 

<scale>에서 지원하는 추가 속성은 Animation 클래스 참조

(이 클래스 참조의 모든 XML 속성은 이 요소에 의해 상속됨)를 참조하세요.


<translate>
    수직 및/또는 수평 모션. 세 가지 형식의 속성을 지원합니다. 

    '%'로 끝나는 -100~100의 값(자신을 기준으로 한 백분율을 나타냄)과 

    '%p'로 끝나는 -100~100의 값(상위 요소를 기준으로 한 백분율), 

    접미사 없는 부동소수점 값(절댓값을 나타냄)을 각각 지원합니다. TranslateAnimation을 나타냅니다.

 

translate 속성

android:fromXDelta
    부동소수점 또는 백분율. 시작 X 오프셋입니다. 

    법선 위치를 기준으로 한 픽셀(예: "5")로 표현되거나

    요소 너비를 기준으로 한 백분율(예: "5%") 또는

    상위 요소 너비를 기준으로 한 백분율(예: "5%p")로 표현됩니다.

 

android:toXDelta
   부동소수점 또는 백분율. 끝 X 오프셋입니다.

   법선 위치를 기준으로 한 픽셀(예: "5")로 표현되거나 요소 너비를 기준으로 한 백분율(예: "5%")

   또는 상위 요소 너비를 기준으로 한 백분율(예: "5%p")로 표현됩니다.

 

android:fromYDelta
   부동소수점 또는 백분율. 시작 Y 오프셋입니다.

   법선 위치를 기준으로 한 픽셀(예: "5")로 표현되거나

   요소 높이를 기준으로 한 백분율(예: "5%") 또는

   상위 요소 높이를 기준으로 한 백분율(예: "5%p")로 표현됩니다.

 

 android:toYDelta
    부동소수점 또는 백분율. 끝 Y 오프셋입니다.

    법선 위치를 기준으로 한 픽셀(예: "5")로 표현되거나

    요소 높이를 기준으로 한 백분율(예: "5%") 또는

    상위 요소 높이를 기준으로 한 백분율(예: "5%p")로 표현됩니다.


<translate>에서 지원하는 추가 속성은 Animation 클래스 참조

(이 클래스 참조의 모든 XML 속성은 이 요소에 의해 상속됨)를 참조하세요.



<rotate>
회전 애니메이션. RotateAnimation을 나타냅니다.


rotate 속성:
android:fromDegrees
    부동소수점. 시작 각도 위치(단위: 도)입니다.


android:toDegrees
    부동소수점. 끝 각도 위치(단위: 도)입니다.


android:pivotX
    부동소수점 또는 백분율. 회전 중심의 X 좌표입니다. 
    객체의 왼쪽 가장자리를 기준으로 한 픽셀(예: "5")로 표현되거나 
    객체의 왼쪽 가장자리를 기준으로 한 백분율(예: "5%") 또는 
    상위 컨테이너의 왼쪽 가장자리를 기준으로 한 백분율(예: "5%p")로 표현됩니다.


android:pivotY
    부동소수점 또는 백분율. 회전 중심의 Y 좌표입니다. 
    객체의 상단 가장자리를 기준으로 한 픽셀(예: "5")로 표현되거나 
    객체의 상단 가장자리를 기준으로 한 백분율(예: "5%") 또는 
    상위 컨테이너의 상단 가장자리를 기준으로 한 백분율(예: "5%p")로 표현됩니다.

<rotate>에서 지원하는 추가 속성은 Animation 클래스 참조
(이 클래스 참조의 모든 XML 속성은 이 요소에 의해 상속됨)를 참조하세요.

 


액티비티 관련 애니메이션

//다른 액티비티 호출 시
startActivity(intent);
overridePendingTransition(R.anim.rightin_activity,R.anim.not_move_activity);
 
//현재 액티비티 종료 시
finish();
overridePendingTransition(R.anim.not_move_activity,R.anim.rightout_activity);

 

 

애니메이션 리스너

   @Override
    public void onBackPressed() {
        Animation aniSlide = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.slide_down);
        layout_login.startAnimation(aniSlide);
        aniSlide.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                Log.d("Woongs","에니메이션 종료 ");
                finish();
                overridePendingTransition(0,0);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
    }
728x90
반응형