API Demos 2.2 연구 노트 (2) - 애니메이션

10434 단어 xmlandroidOSREST360
Android 는 주로 두 가지 애니메이션 을 만 드 는 메커니즘 을 제공 합 니 다. 보충 애니메이션 (tweened animation) 과 프레임 애니메이션 (frame - b - frame animation) 입 니 다.
보충 애니메이션 은 주로 위치, 크기 변화 등 간단 한 전환 을 완성 합 니 다.
프레임 애니메이션 은 주로 일련의 그리 기 가능 한 자원 을 순서대로 불 러 옵 니 다.
 
보충 애니메이션
1. Tweened Animation 은 view, surface 또는 다른 대상 에 사용 할 수 있 으 며 주로 네 가지 유형 으로 나 눌 수 있다.
 
 
Alpha
투명도 그 라 데 이 션 애니메이션
Scale
사이즈 그 라 데 이 션 애니메이션
Translate
위치 이동 애니메이션
Rotate
화면 회전 애니메이션
 
애니메이션 속성 소개:
 
Alpha
 
fromAlpha
애니메이션 시작 시 투명도, 0.0 은 완전 투명
toAlpha
애니메이션 종료 시 투명도, 1.0 은 완전히 불투명 함 을 나 타 냅 니 다.
Scale
 
fromXScale
애니메이션 시작 시 X 좌표 의 신축 크기
toXScale
애니메이션 종료 시 X 좌표 의 신축 크기
fromYScale
애니메이션 시작 시 Y 좌표 의 신축 크기
toYScale
애니메이션 종료 시 Y 좌표 의 신축 크기
pivotX
애니메이션 이 개체 의 X 좌표 에 대한 시작 위치
pivotY
애니메이션 이 개체 의 Y 좌표 에 대한 시작 위치
Translate
 
fromXDelta
애니메이션 시작 시 X 좌표 의 위치
toXDelta
애니메이션 이 끝 날 때 X 좌표 의 위치
fromYDelta
애니메이션 시작 시 Y 좌표 의 위치
toYDelta
애니메이션 종료 시 Y 좌표 의 위치
Rotate
 
fromDegrees
애니메이션 시작 시 개체 의 각도
toDegrees
애니메이션 이 끝 날 때 물건 이 회전 하 는 각도 가 360 도 이상 일 수 있 습 니 다.
pivotX
애니메이션 이 개체 의 X 좌표 에 대한 시작 위치
pivotY
애니메이션 이 개체 의 Y 좌표 에 대한 시작 위치
 
 2. Animation 을 사용 하 는 방식 은 두 가지 가 있 는데 하 나 는 XML 에서 애니메이션 을 정의 하 는 것 이 고 다른 하 나 는 자바 코드 에서 애니메이션 을 정의 하 는 것 이다.
 
XML 에서 애니메이션 정의
예시 1: 애니메이션 을 View 에 적용 하기
(1) animation 을 만 들 고 res \ anim \ alpha. xml 를 새로 만 듭 니 다.
 
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android" 
	android:interpolator="@android:anim/accelerate_interpolator"
	android:fromAlpha="1" android:toAlpha="0" 
	android:duration="@android:integer/config_longAnimTime"/>

 
(2) layot 를 만 들 고 res \ layot \ main. xml 를 새로 만 듭 니 다.
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  android:id="@+id/text01"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" />
<Button android:id="@+id/button01"
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content" 
	android:text="@string/alpha" />
</LinearLayout>

 
 (3) Activity, AnimationActivity. java 를 만 듭 니 다.Animation Utils. loadAnimation 을 통 해 애니메이션 을 불 러 오고 aView. startAnimation 을 통 해 애니메이션 을 실행 합 니 다.
 
package com.xeedroid;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AnimationUtils;

public class AnimationActivity extends Activity {

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		findViewById(R.id.button01).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				findViewById(R.id.text01).startAnimation(
						AnimationUtils.loadAnimation(AnimationActivity.this,
								R.anim.alpha));
			}
		});
	}
}

 (4) 앱 을 실행 하고 알파 단 추 를 누 르 면 텍스트 정보 가 그 라 데 이 션 됩 니 다.
 
예시 2: 애니메이션 을 Activity 에 적용 하기
Android 공식 예제, com. example. android. apis. app. Animation.여기 서 관건 적 인 부분 만 열거 합 니 다.
(1) animation xml 파일.
res/anim/fade.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:fromAlpha="0.0" android:toAlpha="1.0"
       android:duration="@android:integer/config_longAnimTime" />

 
res/anim/hold.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:fromXDelta="0" android:toXDelta="0"
       android:duration="@android:integer/config_longAnimTime" />

 
res/anim/zoom_enter.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- Special window zoom animation: this is the element that enters the screen,
     it starts at 200% and scales down.  Goes with zoom_exit.xml. -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/decelerate_interpolator">
    <scale android:fromXScale="2.0" android:toXScale="1.0"
           android:fromYScale="2.0" android:toYScale="1.0"
           android:pivotX="50%p" android:pivotY="50%p"
           android:duration="@android:integer/config_mediumAnimTime" />
</set>

 
res/anim/zoom_exit.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- Special window zoom animation: this is the element that exits the
     screen, it is forced above the entering element and starts at its
     normal size (filling the screen) and scales down while fading out.
     This goes with zoom_enter.xml. -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:zAdjustment="top">
    <scale android:fromXScale="1.0" android:toXScale=".5"
           android:fromYScale="1.0" android:toYScale=".5"
           android:pivotX="50%p" android:pivotY="50%p"
           android:duration="@android:integer/config_mediumAnimTime" />
    <alpha android:fromAlpha="1.0" android:toAlpha="0"
            android:duration="@android:integer/config_mediumAnimTime"/>
</set>

 
(2) 주요 활동 파일, com / example / android / apis / app / animation. java.overridePendingTransition 방법 을 통 해 사용자 정의 애니메이션 을 Activity 사 이 를 뛰 어 넘 을 때 기본 애니메이션 으로 덮어 씁 니 다.
package com.example.android.apis.app;

// Need the following import to get access to the app resources, since this
// class is in a sub-package.
import com.example.android.apis.R;
import com.example.android.apis.view.Controls1;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


/**
 * <p>Example of explicitly starting and stopping the {@link LocalService}.
 * This demonstrates the implementation of a service that runs in the same
 * process as the rest of the application, which is explicitly started and stopped
 * as desired.</p>
 */
public class Animation extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_animation);

        // Watch for button clicks.
        Button button = (Button)findViewById(R.id.fade_animation);
        button.setOnClickListener(mFadeListener);
        button = (Button)findViewById(R.id.zoom_animation);
        button.setOnClickListener(mZoomListener);
    }

    private OnClickListener mFadeListener = new OnClickListener() {
        public void onClick(View v) {
            startActivity(new Intent(Animation.this, Controls1.class));
            overridePendingTransition(R.anim.fade, R.anim.hold);
        }
    };

    private OnClickListener mZoomListener = new OnClickListener() {
        public void onClick(View v) {
            startActivity(new Intent(Animation.this, Controls1.class));
            overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
        }
    };
}

 
자바 코드 에서 애니메이션 정의
 예시 1:
 (1) layot 파일 은 위의 res \ layot \ main. xml 과 같 습 니 다.
 (2) Animation Activity. java 코드 를 수정 합 니 다.코드 에 animation 을 만 들 고 속성 을 설정 합 니 다.
package com.xeedroid;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;

public class AnimationActivity extends Activity {

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		findViewById(R.id.button01).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				//   rotate animation
				Animation anim = new RotateAnimation(0, 360);
				anim.setDuration(5000);
				anim.setInterpolator(new AccelerateDecelerateInterpolator());
				findViewById(R.id.text01).startAnimation(anim);
			}
		});
	}
}

 
2. 프레임 애니메이션
후속

좋은 웹페이지 즐겨찾기