使用淡入动画来渲染一个视图

34

我想要一个初始时不可见的View,当我按下按钮时,它可以以淡入动画的形式变为可见。我使用AlphaAnimation来实现淡入效果。问题是,如果我将视图设置为不可见,则无法看到动画效果。

3个回答

126

假设您有一个名为imageViewImageView和一个动画文件your_fade_in_anim.xml位于res\anim\文件夹中:

ImageView imageView = (ImageView) findViewById(R.id.imageView);
Animation fadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.your_fade_in_anim);
// Now Set your animation
imageView.startAnimation(fadeInAnimation);

你的XML

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha 
        android:fromAlpha="0.0"
        android:toAlpha="1.0" 
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:duration="[duration (in milliseconds)]"
        android:repeatCount="infinite" />
</set>

将括号替换为实际持续时间。


10
这如何解决视图最初不可见的问题? - User
5
为什么这个答案有这么多赞?它甚至没有回答问题。 - Parvaz Bhaskar
50
虽然它没有回答正文中的问题,但它回答了“如何淡入一个视图”的问题,这是该问题的标题。因此,我想很多人在寻找如何制作动画时会发现这个答案(就像我一样)。虽然不是严格意义上的答案,但它确实很有用。 - karl
7
简单地使用fadeInAnimation.setFillAfter(true); - Oleg Vaskevich
对于lxx来说,它解决了这个问题,因为它开始的alpha值0.0是不可见的。 - auracool
将android:fillAfter="true"添加到xml文件中,即可完成此动画。 - MBH

26

3
非常感谢你!问题在于如果视图不可见,则应用程序不会执行,因此无法使用 onStartAnimation 方法。 但是在按钮的监听器中将视图设置为可见,并在开始动画之前,我将视图设置为不可见以在 onEndAnimation 中使用。 - Gratzi
我不明白为什么你在onEndAnimation中将动画设置为不可见,在你最初的问题中,你说你想让它淡入并变得可见,为什么你在onEndAnimation中将其设置为不可见? - User

3

不要使用无限重复次数并隐藏/显示您的视图,建议只是不重复动画,并最初将 alpha 通道设置为最大。然后您可以使用:

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha 
        android:fromAlpha="0.0"
        android:toAlpha="1.0" 
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:duration="[duration (in milliseconds)]"
        android:repeatCount="0" />
</set>

您已经完成了。无需侦听器、隐藏或显示。就是这么简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接