Android 팜플렛 - 애니메이션 메커니즘 및 팁 (1)
24261 단어 독서 노트
애니메이션 분류:
안드로이드의 애니메이션은 최초의 보기 애니메이션, 그리고 속성 애니메이션, 그리고 벡터 애니메이션으로 세 가지로 나뉘는데 한 걸음 한 걸음 보완되고 있다.
뷰 애니메이션:
소개:
단지 뷰의 보기 위치를 간단하게 바꾸지만 보기의 클릭 이벤트의 위치를 바꾸지 않는다. 즉, 만약에 Button이 보기 애니메이션을 통해 오른쪽으로 일정한 거리를 이동했지만 클릭 이벤트는 원래의 위치에 있기 때문에 순수한 애니메이션 효과를 만드는 데 적합하고 사용자의 상호작용에 적합하지 않다.
애니메이션 변환, 회전 애니메이션, 투명도 애니메이션, 축소 애니메이션 등 네 가지 기초 애니메이션과 조합 애니메이션(네 가지 기초 애니메이션의 조합)을 사용할 수 있다.
사용법:
자바 코드에서 직접 애니메이션 설정을 하거나 XML 파일에 애니메이션을 써서 사용할 때 직접 불러올 수 있습니다.
1. Java 코드에서 애니메이션 사용하기
public void alpha(View view){
//
AlphaAnimation alphaAnimation = new AlphaAnimation(1,0);
alphaAnimation.setRepeatMode(Animation.REVERSE);
alphaAnimation.setRepeatCount(Animation.INFINITE);
alphaAnimation.setDuration(3000);
imageView.startAnimation(alphaAnimation);
}
public void translate(View view){
//
TranslateAnimation translateAnimation = new TranslateAnimation(0F,100F,0F,200F);
translateAnimation.setDuration(3000);
imageView.startAnimation(translateAnimation);
}
public void rotate(View view){
//
RotateAnimation rotateAnimation = new RotateAnimation(0,90);
rotateAnimation.setDuration(3000);
imageView.startAnimation(rotateAnimation);
}
public void scale(View view){
//
ScaleAnimation scaleAnimation = new ScaleAnimation(1F,2F,1F,3F);
scaleAnimation.setDuration(3000);
imageView.startAnimation(scaleAnimation);
}
public void set(View view){
//
AnimationSet animationSet = new AnimationSet(true);
animationSet.setDuration(1000);
ScaleAnimation scaleAnimation = new ScaleAnimation(0F,2F,0F,2F);
scaleAnimation.setDuration(3000);
animationSet.addAnimation(scaleAnimation);//
AlphaAnimation alphaAnimation = new AlphaAnimation(1,0);
alphaAnimation.setRepeatMode(Animation.REVERSE);
alphaAnimation.setRepeatCount(Animation.INFINITE);
alphaAnimation.setDuration(3000);
animationSet.addAnimation(alphaAnimation);//
RotateAnimation rotateAnimation = new RotateAnimation(0,180);
rotateAnimation.setDuration(3000);
animationSet.addAnimation(rotateAnimation);//
imageView.startAnimation(animationSet);
}
2. XML 파일에 애니메이션을 정의하고 Java 코드에 직접 로드합니다.
anim 폴더에서 각각 필요한 보기 애니메이션을 정의하고 xml 파일에서 애니메이션의 속성을 정의합니다.
view_anim_alpha.xml:
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="5000"
/>
view_anim_rotate.xml:
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="180"
android:duration="3000"
/>
view_anim_scale.xml:
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="1"
android:toXScale="2"
android:fromYScale="0"
android:toYScale="2"
android:duration="3000"
/>
view_anim_translate.xml:
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromXDelta="100"
android:toXDelta="400"
android:fromYDelta="100"
android:toYDelta="300"
/>
view_anim_set.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000">
<rotate
android:duration="3000"
android:fromDegrees="0"
android:toDegrees="90" />
<scale
android:duration="3000"
android:fromXScale="1"
android:toXScale="2"
android:fromYScale="1"
android:toYScale="2"/>
set>
Java 코드에서 AnimationUtils를 직접 사용합니다.loadAnimation() 메서드는 xml 파일에 정의된 애니메이션을 로드합니다.
public void alpha(View view){
//
Animation alphaAnimation = AnimationUtils.loadAnimation(this, R.anim.view_anim_alpha);
imageView.startAnimation(alphaAnimation);
}
public void translate(View view){
//
Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.view_anim_translate);
translateAnimation.setDuration(3000);
imageView.startAnimation(translateAnimation);
}
public void rotate(View view){
//
Animation rotateAnimation = AnimationUtils.loadAnimation(this, R.anim.view_anim_rotate);
rotateAnimation.setDuration(3000);
imageView.startAnimation(rotateAnimation);
}
public void scale(View view){
//
Animation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.view_anim_scale);
imageView.startAnimation(scaleAnimation);
}
public void set(View view){
//
Animation animationSet = AnimationUtils.loadAnimation(this, R.anim.view_anim_set);
animationSet.setDuration(1000);
imageView.startAnimation(animationSet);
}
속성 애니메이션:
소개:
속성 애니메이션은 보기 애니메이션이 상호작용을 하지 않는 단점을 보완했다. 그 변화는 보기의 진실한 속성이다. 이렇게 하면 컨트롤과 응답 이벤트가 동기화될 수 있다.그러나 속성 애니메이션에도 사용할 조건이 있다. 즉, 조종할 View 대상의 속성 값을 바꾸려면view 대상에 해당하는 get과 set 방법이 있어야 한다.
ObjectAnimator에서 일반적으로 사용하는 속성:
사용:
1. 해당하는 get 및 set 메서드가 있으며 Java 코드에서 직접 사용합니다.
public void alpha(View view){
//
ObjectAnimator alphaAnimation = ObjectAnimator.ofFloat(imageView,"alpha",0F);
alphaAnimation.setRepeatMode(ValueAnimator.REVERSE);
alphaAnimation.setRepeatCount(ValueAnimator.INFINITE);
alphaAnimation.setDuration(3000);
alphaAnimation.start();
}
public void translate(View view){
//
ObjectAnimator translateAnimationX = ObjectAnimator.ofFloat(imageView,"translationX",300);
ObjectAnimator translateAnimationY = ObjectAnimator.ofFloat(imageView,"translationY",300);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(2000);
animatorSet.playTogether(translateAnimationX,translateAnimationY);
animatorSet.start();
}
public void rotate(View view){
//
// 2D
ObjectAnimator rotateAnimation = ObjectAnimator.ofFloat(imageView,"rotationX",30);
// 3D
ObjectAnimator rotateAnimationX = ObjectAnimator.ofFloat(imageView,"rotationX",30);
ObjectAnimator rotateAnimationY = ObjectAnimator.ofFloat(imageView,"rotationY",60);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(2000);
animatorSet.playTogether(rotateAnimationX,rotateAnimationY);
animatorSet.start();
}
public void scale(View view){
//
ObjectAnimator scaleAnimationX = ObjectAnimator.ofFloat(imageView,"scaleX",0.5F);
ObjectAnimator scaleAnimationY = ObjectAnimator.ofFloat(imageView,"scaleY",2F);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(3000);
animatorSet.playTogether(scaleAnimationX, scaleAnimationY);
animatorSet.start();
}
public void set(View view){
//
// 3D
ObjectAnimator rotateAnimationX = ObjectAnimator.ofFloat(imageView,"rotationX",30);
ObjectAnimator rotateAnimationY = ObjectAnimator.ofFloat(imageView,"rotationY",60);
//
ObjectAnimator alphaAnimation = ObjectAnimator.ofFloat(imageView,"alpha",0F);
alphaAnimation.setRepeatMode(ValueAnimator.REVERSE);
alphaAnimation.setRepeatCount(ValueAnimator.INFINITE);
alphaAnimation.setDuration(3000);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(3000);
animatorSet.playTogether(rotateAnimationX, rotateAnimationY,alphaAnimation);
animatorSet.start();
}
2. 대응하는 get과 set 방법이 없고 포장된view 클래스를 사용합니다:
/**
* view
*/
private static class WarpperView{
private View mView;
public WarpperView(View mView) {
this.mView = mView;
}
public int getWidth(){
return mView.getLayoutParams().width;
}
public int getHeight(){
return mView.getLayoutParams().height;
}
}
사용할 때 작업할view를 WrapperView에 직접 전달하고 WrapperView에 대응하는 get과 set 방법을 추가합니다. ObjectAnimator를 통해 WrapperView의 실례 대상을 직접 조작하면 됩니다.
WarpperView warpperView = new WarpperView(imageView);
ObjectAnimator objectAnimator = ObjectAnimator.ofInt(warpperView, "width", 500);
objectAnimator.start();
3. 해당 get 및 set 메서드가 없으며 ValueAnimator를 사용합니다.
ValueAnimator는 사실 뷰에 직접적으로 애니메이션 효과를 내는 것은 아니지만 애니메이션에 필요한 수치를 제공할 수 있다. 예를 들어 하나의 수치 발생기와 같이 애니메이션 과정에서 수치의 변화를 감청하여view에 현재 디스플레이 상태를 설정할 수 있다.
public void anim(View view) {
ValueAnimator valueAnimator = ValueAnimator.ofFloat(100,0);
valueAnimator.setTarget(imageViewe);
valueAnimator.setDuration(1000).start();
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// valueAnimator , view, imageView Y
float value = (float) animation.getAnimatedValue();
imageViewe.setTranslationY(value);
}
});
}
속성 애니메이션의 조합:
보기 애니메이션과 마찬가지로 우리는 여러 가지 속성 애니메이션을 동시에 조합하여 더욱 다채로운 애니메이션 효과를 실현할 수 있다.
방법 1: PropertyValuesHolder를 사용하여 다음을 수행합니다.
PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat("translationX", 300f);
PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("translationY", 500f);
PropertyValuesHolder pvh3 = PropertyValuesHolder.ofFloat("alpha", 0.5f);
ObjectAnimator.ofPropertyValuesHolder(pvh1, pvh2, pvh3).setDuration(1000).start();
방법 2: AnimatorSet 사용:
ObjectAnimator translateAnimationX = ObjectAnimator.ofFloat(imageView,"translationX",300);
ObjectAnimator translateAnimationY = ObjectAnimator.ofFloat(imageView,"translationY",300);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(2000);
animatorSet.playTogether(translateAnimationX,translateAnimationY);
animatorSet.start();
애니메이션을 여러 개 생성한 다음 AnimatorSet에 배치할 수 있습니다. AnimatorSet 클래스는 다음과 같은 여러 가지 방법으로 애니메이션의 재생을 제어합니다.
방법 3: 속성 애니메이션의 자동 제어 특성을 사용합니다.
ObjectAnimator의 setStartDelay () 를 통해 애니메이션을 자동으로 구동합니다.
alphaAnimation.setStartDelay();
XML에서 속성 애니메이션을 정의하려면 다음과 같이 하십시오.
마찬가지로 보기 애니메이션과 마찬가지로 속성 애니메이션도 XML 파일에서 정의할 수 있으며 사용할 때 정의된 애니메이션을 직접 불러옵니다.그림% 1개의 캡션을 편집했습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로그'메타프로그램 루비 버전 2'3장 읽기동적 방법 Object#send 호출 방법은 약간 메모와 Object#send obj.send(:my_method, 3) Object#send를 사용하면 어떤 방법으로든 호출할 수 있습니다. privete 방법을 호...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.