TextView 动画 - 渐入、等待、渐出

30

我正在制作一款图片库应用程序。目前我有一个带有底部文字视图的ImageView。当前它只是半透明的。我想要让它淡入,等待3秒钟,然后淡出90%。聚焦它或加载新图片将使它重复这个过程。我已经阅读了十几页内容并尝试了一些方法,但没有成功。我只得到了淡入和瞬间淡出。

5个回答

63
protected AlphaAnimation fadeIn = new AlphaAnimation(0.0f , 1.0f ) ; 
protected AlphaAnimation fadeOut = new AlphaAnimation( 1.0f , 0.0f ) ; 
txtView.startAnimation(fadeIn);
txtView.startAnimation(fadeOut);
fadeIn.setDuration(1200);
fadeIn.setFillAfter(true);
fadeOut.setDuration(1200);
fadeOut.setFillAfter(true);
fadeOut.setStartOffset(4200+fadeIn.getStartOffset());

对于白色背景完美运作。否则,您需要在实例化AlphaAnimation类时切换值。像这样:

AlphaAnimation fadeIn = new AlphaAnimation( 1.0f , 0.0f ); 
AlphaAnimation fadeOut = new AlphaAnimation(0.0f , 1.0f ); 

这适用于黑色背景和白色文本颜色。


13

基于Guy Cothal的回答的Kotlin扩展函数:

inline fun View.fadeIn(durationMillis: Long = 250) {
    this.startAnimation(AlphaAnimation(0F, 1F).apply {
        duration = durationMillis
        fillAfter = true
    })
}

inline fun View.fadeOut(durationMillis: Long = 250) {
    this.startAnimation(AlphaAnimation(1F, 0F).apply {
        duration = durationMillis
        fillAfter = true
    })
}

9
这是我在项目中使用的循环淡入淡出动画TextView的解决方案:
private void setUpFadeAnimation(final TextView textView) {
    // Start from 0.1f if you desire 90% fade animation
    final Animation fadeIn = new AlphaAnimation(0.0f, 1.0f);
    fadeIn.setDuration(1000);
    fadeIn.setStartOffset(3000);
    // End to 0.1f if you desire 90% fade animation
    final Animation fadeOut = new AlphaAnimation(1.0f, 0.0f);
    fadeOut.setDuration(1000);
    fadeOut.setStartOffset(3000);

    fadeIn.setAnimationListener(new Animation.AnimationListener(){
        @Override
        public void onAnimationEnd(Animation arg0) {
            // start fadeOut when fadeIn ends (continue)
            textView.startAnimation(fadeOut);
        }

        @Override
        public void onAnimationRepeat(Animation arg0) {
        }

        @Override
        public void onAnimationStart(Animation arg0) {
        }
    });

    fadeOut.setAnimationListener(new Animation.AnimationListener(){
        @Override
        public void onAnimationEnd(Animation arg0) {
            // start fadeIn when fadeOut ends (repeat)
            textView.startAnimation(fadeIn);
        }

        @Override
        public void onAnimationRepeat(Animation arg0) {
        }

        @Override
        public void onAnimationStart(Animation arg0) {
        }
    });

    textView.startAnimation(fadeOut);
}

希望这可以帮助到您!

如果您想从字符串数组中动态地实现淡入淡出文本效果,您会在哪里设置文本呢? - karthik prasad

4
你可以使用额外的动画对象(不改变其alpha值)来防止立即淡出,为你的淡入效果设置animationListener,并在淡入结束的on animationEnd中启动额外的动画对象,然后在额外的动画对象结束的on animationEnd中开始淡出。试试下面的链接,它会有所帮助。 Auto fade-effect for textview

0

我正在寻找类似问题(TextView淡入/等待/淡出)的解决方案,并找到了这个(实际上,官方文档也指向了这个)。您可以通过添加更多参数来显然地改进它。

public void showFadingText(String text){
    txtView.setText(text);
    Runnable endAction;
    txtView.animate().alpha(1f).setDuration(1000).setStartDelay(0).withEndAction(
            endAction = new Runnable() {
                public void run() {
                    txtView.animate().alpha(0f).setDuration(1000).setStartDelay(2000);
                }
            }
    );
}

假设你已经在其他地方声明了txtView,并且alpha的初始值为零。


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