如何放大并返回动画android?

Posted

技术标签:

【中文标题】如何放大并返回动画android?【英文标题】:How to zoom in and return with animation android? 【发布时间】:2020-01-16 15:03:07 【问题描述】:

我一直在尝试放大视图,然后通过类似于动画的缩小返回到原始大小。

我能够做的是在一组中放大和缩小,并在按钮单击时在图像视图上对其进行动画处理,但它第一次突然降低了图像大小,然后在以后的单击中动画效果很好。我将不胜感激任何帮助来完成流畅的动画

我的代码

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    >
    <scale
        android:duration="1000"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale=".5"
        android:toYScale=".5" >
    </scale>
    <scale
        android:duration="1000"
        android:fromXScale=".5"
        android:fromYScale=".5"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1"
        android:toYScale="1" >
    </scale>

</set>
final Animation ani_in = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.zoomin_out);
imageView.startAnimation(ani_in);

【问题讨论】:

【参考方案1】:

动画已过时(Animation vs Animator)。使用 ValueAnimator:

        final ValueAnimator anim = ValueAnimator.ofFloat(1f, 1.5f);
        anim.setDuration(1000);
        anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() 
            @Override
            public void onAnimationUpdate(ValueAnimator animation) 
                image.setScaleX((Float) animation.getAnimatedValue());
                image.setScaleY((Float) animation.getAnimatedValue());
            
        );
        anim.setRepeatCount(1);
        anim.setRepeatMode(ValueAnimator.REVERSE);
        anim.start();

【讨论】:

【参考方案2】:

不需要使用两个刻度标签,只需一个刻度标签即可完成

通过使用这两个:

android:repeatCount="infinite"
 android:repeatMode="reverse"

在你的动画文件中

<scale
        android:duration="30000"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="90%"
        android:pivotY="90%"
        android:toXScale="1.5"
        android:toYScale="1.5"
        android:startOffset="1000"
        android:repeatCount="infinite"
        android:repeatMode="reverse">
    </scale>

在代码文件中

imageView.startAnimation(AnimationUtils.loadAnimation(this, R.anim.zoomin_out));

【讨论】:

以上是关于如何放大并返回动画android?的主要内容,如果未能解决你的问题,请参考以下文章

Android之实现点击布局缩小然后再放大动画

Android之实现点击布局缩小然后再放大动画

Android 实现布局的缩小和再放大动画(使用scale动画效果进行实现)

android如何对viewpager里面的图片进行缩放

Android 实现布局的缩小和再放大动画(使用scale动画效果进行实现)

Android View 从左边滑出动画 ,以及从左上,左下,右上,右下放大动画。