缩放动画无法按预期工作

时间:2013-12-19 02:25:31

标签: android android-animation

我尝试做的是将ImageView从正常尺寸缩放到20%,然后再缩回。这应该是循环的。我用以下代码完成了这个,但它不能正常工作。更多信息如下。

动画/ scale.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:duration="1000"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:toXScale="1.2"
        android:toYScale="1.2"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false" />
    <scale
        android:startOffset="1000"
        android:duration="1000"
        android:fromXScale="1.2"
        android:fromYScale="1.2"
        android:toXScale="1.0"
        android:toYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false" />
</set>

然后在我的代码中我做

private void scaleAnimation() {
    final Animation scaler = AnimationUtils.loadAnimation(this, R.anim.scale);
    scaler.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                animation.reset();
                animation.startNow();
            }
        });
    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
            scale.startAnimation(scaler);
        }
    }, 2000);
}

我有处理程序,所以我可以看到一开始发生了什么。

问题有点难以解释。一旦动画开始,我的图像似乎会缩放,然后它会执行动画。因此,图像应该显示2秒钟。正如动画开始时它突然变得更大,看起来是25% - 50%,然后动画正常运行。动画结束后,图像会很快调整到原始大小,然后再次放大,然后动画重新开始。

我尝试过几张不同的图像。据我所知,fromXScale = 1.0启动没有缩放的动画,即图像不变。希望有人可以阐明我做错了什么或者我误解了这些概念。

干杯

2 个答案:

答案 0 :(得分:4)

如果您要完成的是一个视图,从1.0到1.2不断缩放到1.0,您可以使动画更简单。

您将执行以下操作: 仅定义一个缩放动画(从1.0到1.2) 将重复计数设置为INFINITE 将重复模式设置为REVERSE

有关详情,请查看Animation class

上的文件

答案 1 :(得分:0)

就我而言,我需要为视图设置一次动画 (1.0f -> 0.6f -> 1.0f)

cheezy 的解决方案适用于我改变 repeatCount = 1 而不是无穷大。

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <scale
        android:duration="600"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatMode="reverse"
        android:repeatCount="1"
        android:toXScale="0.6"
        android:toYScale="0.6" />
</set>