2012-02-07 4 views
2

ImageViewで3つのアニメーションを順番に適用しています。私はアニメーションごとにAnimationListenerを持っているので、onAnimationEndの内側で次のアニメーションを開始するので、重なり合いはありません。アニメーションは、スケールイン、フェードアウト、最後のフェードインです。アニメーションがフェードインすると、再びアニメーションのスケールが再開され、これらのアニメーションは「永遠に」実行されます。私が達成しようとしているのは、彼らの新しいホーム画面にTwitterが適用したのと同じ効果で、写真を変え続けることです。Android:FillAfterがImageViewのScaleAnimationで動作しない

私のアニメーションの問題は、ImageViewでスケーリングした後で、フェードアウトアニメーションを開始する前に、ImageViewがリセットされ、コードまたはxmlファイルのfillAfterを設定してもスケールの変更が失われることです。

規模:

<?xml version="1.0" encoding="utf-8"?> 
<scale xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fillAfter="true" 
    android:duration="9000" 
    android:fromXScale="1.0" 
    android:fromYScale="1.0" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:pivotX="50.0%" 
    android:pivotY="50.0%" 
    android:toXScale="1.1" 
    android:toYScale="1.1" /> 

フェード中:

<?xml version="1.0" encoding="utf-8"?> 
<alpha xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="1000" 
    android:fromAlpha="0.0" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:toAlpha="1.0" /> 

フェードアウト

mAnimationFadeIn = AnimationUtils.loadAnimation(this, R.anim.fade_in); 
    mAnimationFadeIn.setFillAfter(true); 
    mAnimationFadeOut = AnimationUtils.loadAnimation(this, R.anim.fade_out); 
    mAnimationFadeOut.setFillAfter(true); 
    mAnimationScaleIn = AnimationUtils.loadAnimation(this, R.anim.slow_scale_in); 
    mAnimationScaleIn.setFillAfter(true); 
    mAnimationScaleIn.setFillEnabled(true); 
    mAnimationScaleIn.setFillBefore(false); 
    mAnimationScaleIn.setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) {} 

     @Override 
     public void onAnimationRepeat(Animation animation) {} 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      mImageView.startAnimation(mAnimationFadeOut); 
     } 
    }); 

    mAnimationFadeOut.setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) {} 

     @Override 
     public void onAnimationRepeat(Animation animation) {} 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      mImageView.setImageResource(mImages[++mImageIndex > 2 ? mImageIndex=0 : mImageIndex]); 
      mImageView.startAnimation(mAnimationFadeIn); 
     } 
    }); 

    mAnimationFadeIn.setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) {} 

     @Override 
     public void onAnimationRepeat(Animation animation) {} 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      mImageView.startAnimation(mAnimationScaleIn); 
     } 
    }); 

    mImageView.startAnimation(mAnimationScaleIn); 

、ここでは私のアニメーションです:ここではアニメーションイベントを処理するためのコードは次のとおりです。

<?xml version="1.0" encoding="utf-8"?> 
<alpha xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="1000" 
    android:fromAlpha="1.0" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:toAlpha="0.0" /> 

フェードアウトアニメーションを開始する前にスケール変換を維持する方法はありますか? setFillAfter、setFillBefore、setFillEnabledのすべての組み合わせを試しましたが、スケールアニメーションが終了してもスケール変換が維持されることはありません。

感謝 T U以下に示すよう

答えて

-1

でそれを有効にしなければならないのは、タグを設定し、

<?xml version="1.0" encoding="UTF-8"?> 
<set android:shareInterpolator="false" 
android:fillEnabled="true" 
android:fillAfter="true" 
xmlns:android="http://schemas.android.com/apk/res/android"> 

<rotate 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromDegrees="0" 
android:toDegrees="359" 
android:pivotX="50%" 
android:fromXScale="1.0" 
android:toXScale="1.4" 
android:fromYScale="1.0" 
android:toYScale="1.4" 
android:pivotY="50%" 
android:fillAfter="true" 
android:fillEnabled="true" 
android:duration="2000" /> 

<scale 
android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
android:fromXScale="1.0" 
android:toXScale="1.4" 
android:fromYScale="1.0" 
android:toYScale="1.4" 
android:pivotX="50%" 
android:pivotY="50%" 
android:fillEnabled="true" 
android:fillAfter="true" 
android:duration="2000" /> 

</set> 
+0

... または規模などを回転させるのいずれかで使用するよりも、何をしますあなたは「どちらか*回転ORスケールなどで使用する」という意味ですか? fillEnabledはfillBeforeにのみ適用されます。 – RichieHH

関連する問題