Animation 효과 제어(一)

6661 단어 animation
이 클래스는 회전, 이동, 스트레칭, 페이드 등 효과 1, 알파-페이드 페이드 2, Scale-축소 3, 로테이트-회전 4, Translate-이동 제공
 
Tweened Animations 만들기 단계 1, Animation Set 대상 만들기 2, 필요에 따라 해당하는 Animation 대상 만들기 3, 소프트웨어 애니메이션의 수요에 따라 Animation 대상에 해당하는 데이터 설정 4, Animation 대상을 Animation Set 대상에 추가하기 5, 컨트롤러 대상을 사용하여Animation Set를 실행합니다
 
private class AlphaButtonListener implements OnClickListener {
	@Override
	public void onClick(View view) {
		// AnimationSet 
		AnimationSet animationSet = new AnimationSet(true);
		// AlphaAnimation ,1 ,0 , 
		AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
		// ( : )
		alphaAnimation.setDuration(1000);
		// AlphaAnimation AnimationSet 
		animationSet.addAnimation(alphaAnimation);
		// ImageView startAnimation 
		imageView.startAnimation(animationSet);
	}
}

 
private class RotateButtonListener implements OnClickListener {
	@Override
	public void onClick(View view) {
		AnimationSet animationSet = new AnimationSet(true);	/*Animation.RELATIVE_TO_PARENT, ,1f ,0.5f ,Animation.RELATIVE_TO_SELF, , , */
		RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
				Animation.RELATIVE_TO_PARENT, 1f,
				Animation.RELATIVE_TO_PARENT, 0f);
		rotateAnimation.setDuration(5000);
		animationSet.addAnimation(rotateAnimation);
		imageView.startAnimation(animationSet);
	}
}

 
private class ScaleButtonListener implements OnClickListener {
	@Override
	public void onClick(View view) {
		// Interpolator 
		AnimationSet animationSet = new AnimationSet(true);
		// 100% 10%, “ ”
		ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.1f, 1,
				0.1f, Animation.RELATIVE_TO_SELF, 0.5f,
				Animation.RELATIVE_TO_SELF, 0.5f);
		animationSet.addAnimation(scaleAnimation);
		// 1 
		animationSet.setStartOffset(1000);
		// true, 
		animationSet.setFillAfter(true);
		// false, 
		animationSet.setFillBefore(false);
		// 3 
		//animationSet.setRepeatCount(3);
		animationSet.setDuration(2000);
		imageView.startAnimation(animationSet);
	}
}

 
private class TranslateButtonListener implements OnClickListener {
	@Override
	public void onClick(View view) {
		AnimationSet animationSet = new AnimationSet(true);
		/* X , X 
		 Y , Y */
		TranslateAnimation translateAnimation = new TranslateAnimation(
				Animation.RELATIVE_TO_SELF, 0f, 
				Animation.RELATIVE_TO_SELF,
				0.5f, Animation.RELATIVE_TO_SELF, 0f,
				Animation.RELATIVE_TO_SELF, 1.0f);
		translateAnimation.setDuration(1000);
		animationSet.addAnimation(translateAnimation);
		imageView.startAnimation(animationSet);
	}
}

 
설정 파일 xml을 이용하여 animation을 설정합니다. 1,res 폴더 아래에 anim이라는 폴더를 만듭니다. 2,xml 파일을 만듭니다. set 탭 3을 먼저 추가하고 이 탭에rotate,alpha,scale,translate4를 추가하고 코드에AnimationUtil을 사용하여 xml 파일을 불러오고 Animation 대상을 생성합니다.
 
android:toDegrees="+350"//각도가 정각android:pivotX="50"//절대 위치 포지셔닝android:pivotX="50%"//컨트롤 자체에 대한 포지셔닝 사용android:pivotX="50%p"//컨트롤에 대한 부 컨트롤 포지셔닝
여러 개의 효과가 같은 xml 파일에 불러올 수 있습니다. 이렇게 하면 여러 개의 효과를 동시에 처리할 수 있습니다
 
파일 알파를 만듭니다.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
	android:interpolator="@android:anim/accelerate_interpolator"
	android:shareInterpolator="true">	
	<alpha 
		android:fromAlpha="1.0"
		android:toAlpha="0.0"
		android:startOffset="500"
		android:duration="2000" />
	<rotate android:fromDegrees="0"
		android:toDegrees="360"
		android:pivotX="50%"
		android:pivotY="50%"
		android:duration="2000" />
</set>

 
private class AlphaButtonListener implements OnClickListener {
	@Override
	public void onClick(View view) {
		// AnimationUtils 
//		Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha);
//		imageView.startAnimation(animation);
		
		// 
		AnimationSet animationSet = new AnimationSet(false);
		AlphaAnimation alpha = new AlphaAnimation(1.0f, 0.0f);
		alpha.setInterpolator(new DecelerateInterpolator());
		RotateAnimation rotate = new RotateAnimation(0, 360,
				Animation.RELATIVE_TO_SELF, 0.5f,
				Animation.RELATIVE_TO_SELF, 0.5f);
		rotate.setInterpolator(new AccelerateInterpolator());
		animationSet.addAnimation(alpha);
		animationSet.addAnimation(rotate);
		animationSet.setDuration(2000);
		animationSet.setStartOffset(500);
		imageView.startAnimation(animationSet);
	}
}

 
Interpolator 클래스는 애니메이션 변화의 속도를 정의합니다.
android:interpolator="//애니메이션 변화 속도 설정 android:shareInterpolator="true"//공유 애니메이션 변화 속도
 
Frame-by-Frame Animations - 프레임
Drawable 시퀀스, 이 Drawable들은 지정한 시간에 따라 하나씩 표시할 수 있습니다
res/drawable-ldpi 디렉터리에서 anim 만들기nv.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/nv1" android:duration="500" />
	<item android:drawable="@drawable/nv2" android:duration="500" />
	<item android:drawable="@drawable/nv3" android:duration="500" />
	<item android:drawable="@drawable/nv4" android:duration="500" />
</animation-list>

 
 
private class ButtonListener implements OnClickListener{
	@Override
	public void onClick(View v) {
		imageView.setBackgroundResource(R.drawable.anim_nv);
		AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();
		animationDrawable.start();
	}
}

 
 
1. LayoutAnimationController는 하나의layout에 있거나 ViewGroup에 있는 컨트롤러에 애니메이션 효과 설정을 한다. 2. 컨트롤러마다 같은 애니메이션 효과가 있다. 3. 이런 컨트롤러의 애니메이션 효과는 서로 다른 시간에 나타난다. 4. LayoutAnimationController는 xml 문서에 설정할 수도 있고 코드에 설정할 수도 있다.

좋은 웹페이지 즐겨찾기