Android:FillAfter不适用于ImageView中的ScaleAnimation

时间:2012-02-07 14:20:45

标签: android

我在ImageView中一个接一个地应用三个动画。我为每个动画都有一个AnimationListener,所以在onAnimationEnd中,我开始下一个动画,所以它们不重叠。动画是这样的:缩放,淡出和最后一个淡入。动画中的淡入将再次重新开始动画缩放,这些动画将“永远”运行。我想要实现的是Twitter已经应用到他们的新主屏幕的相同效果,他们不断更改图片。

我的动画问题在于,在ImageView中进行缩放之后,在盯着淡出动画之前,ImageView会被重置并且缩小比例,甚至在代码或xml文件中设置fillAfter。以下是处理动画事件的代码:

    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"?>
<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" />

淡出:

<?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的所有组合,我无法在比例动画结束后保持比例变换。

非常感谢 Ť

1 个答案:

答案 0 :(得分:-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>