Android 개발 애니메이션 구현


Android 개발 애니메이션 구현
/*
 *  Android 개발 애니메이션 구현
 *  북경 안 드 로 이 드 클럽 그룹: 167839253
 *  Created on: 2011-12-09
 *  Author: blueeagle
 *  Email: [email protected]
 */
       '안 드 로 이 드 개발 의 PopupWindow' 라 는 글 에서 애니메이션 과 관련 된 내용 이 초보 적 으로 언급 되 었 다.팝 업 대화 상자그 애니메이션 효 과 는 xml 파일 을 이용 하여 설정 할 수 있 습 니 다. 복습 해 보 세 요. 바로 대화 상자 의 날 아 오 르 는 것 에 대해 XML 파일 두 개 를 정의 하 는 것 입 니 다.예 를 들 면:
애니메이션 xml 로 날 아가 기:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
       android:fromYDelta="-100"
       android:toYDelta="0"
       android:duration="1000"
       android:fillEnabled="true"
       android:fillAfter="true"
       />
        <scale android:fromXScale="0.6" android:toXScale="1.0"
                android:fromYScale="0.6" android:toYScale="1.4" android:pivotX="50%"
                android:pivotY="50%" android:duration="2000" 
                android:fillAfter="false"/>
        <alpha android:interpolator="@android:anim/decelerate_interpolator"
                android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000" />            
        <rotate
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromDegrees="0"
        android:toDegrees="+359"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="2000">
        </rotate>
</set>


anin.xml
애니메이션 날 리 기:
anout.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true"
    >
    <translate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
       android:fromYDelta="0"
        android:toYDelta="-100"
       android:duration="1000"
       android:fillEnabled="true"
       android:fillAfter="true"
       />
               <scale android:fromXScale="1.0" android:toXScale="0.4"
                android:fromYScale="1.0" android:toYScale="0.4" android:pivotX="50%"
                android:pivotY="50%" android:duration="2000" />
    <alpha android:interpolator="@android:anim/decelerate_interpolator"
       android:fromAlpha="1.0" 
       android:toAlpha="0.0" 
       android:duration="2000" 
       />
</set>


 
위의 애니메이션 의 특징 을 정리 하 자.
1.       투명도 그 라 데 이 션
2.       사이즈 신축
3.       화면 회전
4.       위치 이동
그러면 이런 애니메이션 은 xml 에 나타 날 수 있 고 코드 에 도 나타 날 수 있다.코드 에서 상기 네 가지 애니메이션 형식 에 대해 다음 과 같이 요약 할 수 있다.
1.       투명도 그 라 데 이 션
AlphaAnimation(float fromAlpha,float toAlpha);
이 매개 변 수 는 xml 파일 의 매개 변수 와 대응 하 며 (뒤의 것 도 모두 대응) 기능 은 xml 파일 의 것 과 일치 합 니 다.
from Alpha: 애니메이션 시작 시의 투명 도 를 표시 합 니 다.
toAlpha: 애니메이션 이 끝 날 때의 투명 도 를 표시 합 니 다.
0.0 은 완전 투명, 1.0 은 완전 불투명 을 나타 낸다.
2.       사이즈 신축
ScaleAnimation(float fromXScale,float toXScale,float fromYScale,float toYScale,int pivotXType,float pivotX,int pivotYType,float pivotY)
from XScale, toXScale: 시작 과 끝 에 있 는 X 좌표 의 신축;
from YScale, toYScale: 시작 과 끝 에 있 는 Y 좌표 의 신축;
pivotx: 신축 애니메이션 이 X 좌표 에 대한 시작 위 치 를 표시 합 니 다.
pivoty: 신축 애니메이션 이 Y 좌표 의 시작 위치 에 비해
pivotXType: X 좌표 의 신축 모드;
pivoty Type: Y 좌표 의 신축 모드 입 니 다.
3.       화면 회전
RotateAnimation(float fromDegrees,float toDegrees,int pivotXType,float pivotX,int pivotYType,float pivotY)
from Degrees, toDegrees: 시작 과 끝 날 때의 각도;
from YScale, toYScale: 시작 과 끝 에 있 는 Y 좌표 의 신축;
pivotx: 신축 애니메이션 이 X 좌표 에 대한 시작 위 치 를 표시 합 니 다.
pivoty: 신축 애니메이션 이 Y 좌표 의 시작 위치 에 비해
pivotXType: X 좌표 의 신축 모드;
pivoty Type: Y 좌표 의 신축 모드 입 니 다.
4.       위치 이동
TranslateAnimation(float fromXDelta,float toXDelta,float fromYDelta,float toYDelte)
from XDelta, from YDelta: 시작 할 때의 좌표;
toXDelta, toYDelta: 끝 날 때의 좌표;
 
물론 코드 에서 이런 설정 을 한 후에 애니메이션 을 재생 해 야 합 니 다. 그러면 애니메이션 을 재생 하 는 함 수 는 다음 과 같 습 니 다.
startAnimation(Animation animation)
애니메이션 은 재생 할 애니메이션 입 니 다.
 
또한 애니메이션 을 재생 할 시간 을 설정 해 야 합 니 다.
 
setDuration(long duration)
duration 은 애니메이션 에 표 시 된 시간 으로 밀리초 단위 입 니 다.
 
이상 에서 소개 한 것 은 안 드 로 이 드 플랫폼 의 Tween 애니메이션 입 니 다. 안 드 로 이 드 플랫폼 에서 모두 두 가지 애니메이션 을 제 공 했 고 다른 하 나 는 Frame 애니메이션 입 니 다.
 
       Frame 애니메이션 이 재생 되 려 면 프레임 이 많은 그림 이 필요 합 니 다.우선 XML 파일 에서 설명 할 수 있 습 니 다.
framean.xml:
<?xml version="1.0" encoding="utf-8"?>

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"

    android:oneshot="false">
    <item android:drawable="@drawable/pic1" android:duration="100" />
    <item android:drawable="@drawable/pic2" android:duration="100" />
    <item android:drawable="@drawable/pic3" android:duration="100" />
…
…
…
</animation-list>


JAVA 코드:
public class GameView extends View
{
    //   AnimationDrawable    
    private AnimationDrawable   frameAnimation    = null;
    Context                     mContext      = null;
    public GameView(Context context)
    {
       super(context);
       mContext = context;
       //    ImageView      
       ImageView myImageView = new ImageView(mContext);
       //          
       myImageView.setBackgroundResource(R.anim.framean);   
       //    
       frameAnimation = (AnimationDrawable)myImageView.getBackground();
       //       
       frameAnimation.setOneShot( false );  
       //         
       this.setBackgroundDrawable(frameAnimation);
    }
    public void onDraw(Canvas canvas)
    {
       super.onDraw(canvas);
    }
    public boolean onKeyUp(int keyCode, KeyEvent event)
    {
       switch ( keyCode )
       {
       case KeyEvent.KEYCODE_DPAD_UP:  
           /*        */
           frameAnimation.start();
           break;
       }
       return true;
    }
}


xml 로 설명 하지 않 고 코드 를 직접 사용 하 는 방법 은:
public class GameView extends View {
	//   AnimationDrawable    
	private AnimationDrawable	frameAnimation	= null;
	Context						mContext		= null;
	//    Drawable  
	Drawable myBitAnimation = null;
	public GameView(Context context) {
		super(context);
		//   AnimationDrawable  
		mContext = context;
		frameAnimation = new AnimationDrawable();
		//    ,             
		for(int i=1;i<=3;i++)
		{
			int id = getResources().getIdentifier("pic"+i, "drawable", mContext.getPackageName());
			myBitAnimation = getResources().getDrawable(id);
			//       ,  myBitAnimation      ,  100     ,     
			frameAnimation.addFrame(myBitAnimation, 100);
		}
		//      ,false    
		frameAnimation.setOneShot(false);
		//            
		this.setBackgroundDrawable(frameAnimation);
    public void onDraw(Canvas canvas){
    	super.onDraw(canvas);
	public boolean onKeyUp(int keyCode, KeyEvent event)
	{
		switch ( keyCode )
		{
		case KeyEvent.KEYCODE_DPAD_UP:	
			//       
			frameAnimation.start();
			break;
		}
		return true;
	}

}

좋은 웹페이지 즐겨찾기