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