【问题标题】:Android alpha animation fadein fadeout with delaysAndroid alpha动画淡入淡出延迟
【发布时间】:2011-03-18 22:04:51
【问题描述】:

我想做一个非常简单的 alpha 动画,但我找不到有效的方法。

这个想法是在一个视图上执行这个动画:

  1. alpha 从 0 到 1 的 1 秒
  2. 将 alpha 设置为 1 5 秒
  3. alpha 从 1 到 0 的 1 秒
  4. 将 alpha 设置为 0 5 秒。
  5. 从 1 号重新开始。

我尝试使用 AnimationSet 来实现它:

AnimationSet animationSet = new AnimationSet(true);

Animation animation1 = new AnimationUtils.loadAnimation(this, android.R.anim.fade_in);
animation1.setDuration(1000);

Animation animation2 = new AnimationUtils.loadAnimation(this, android.R.anim.fade_out);
animation2.setDuration(1000);
animation2.setStartOffset(5000);

Animation animation3 = new AlphaAnimation(0.0f, 0.0f);
animation3.setDuration(4000)
animation3.setStartOffset(6000);

animationSet.add(animation1);
animationSet.add(animation2);
animationSet.add(animation3);

等等。

但似乎第三个动画与所有 alpha 动画混在一起,我认为这会导致 Android 管理此类动画的方式出现内部不一致。

有什么想法吗?

谢谢。

【问题讨论】:

  • 你能告诉我我的代码是否运行良好吗?如果是,请接受答案

标签: android animation alpha fadein fadeout


【解决方案1】:

好的记住这两点来解决这个问题


  • 如果我想在 5 秒后以 1 秒的动画持续时间为 1.0f to 0.0f 制作动画,这最终是一个 1 秒的动画,暂停 5 秒。

    要实现这一点:

    1. setDuration(1000)(持续时间为 1 秒)
    2. setStartOffset(5000)(5秒后开始)

  • 您只需要 2 个将永远循环播放的动画。

    1.0.0f to 1.0f,暂停 5 秒,持续 1 秒

    2.1.0f to 0.0f,暂停 5 秒,持续 1 秒


这里是代码:

    animation1 = new AlphaAnimation(0.0f, 1.0f);
    animation1.setDuration(1000);
    animation1.setStartOffset(5000);

    animation2 = new AlphaAnimation(1.0f, 0.0f);
    animation2.setDuration(1000);
    animation2.setStartOffset(5000);

    textView.startAnimation(animation1);

但是要永远循环,我将使用AnimationListener,因为repeatCount 是错误的:

    animation1 = new AlphaAnimation(0.0f, 1.0f);
    animation1.setDuration(1000);
    animation1.setStartOffset(5000);

    //animation1 AnimationListener
    animation1.setAnimationListener(new AnimationListener(){

        @Override
        public void onAnimationEnd(Animation arg0) {
            // start animation2 when animation1 ends (continue)
            textView.startAnimation(animation2);
        }

        @Override
        public void onAnimationRepeat(Animation arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationStart(Animation arg0) {
            // TODO Auto-generated method stub

        }

    });

    animation2 = new AlphaAnimation(1.0f, 0.0f);
    animation2.setDuration(1000);
    animation2.setStartOffset(5000);

    //animation2 AnimationListener
    animation2.setAnimationListener(new AnimationListener(){

        @Override
        public void onAnimationEnd(Animation arg0) {
            // start animation1 when animation2 ends (repeat)
            textView.startAnimation(animation1);
        }

        @Override
        public void onAnimationRepeat(Animation arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationStart(Animation arg0) {
            // TODO Auto-generated method stub

        }

    });

    textView.startAnimation(animation1);

【讨论】:

  • 完美答案!非常感谢!
  • 它可以用来等待 5 秒然后显示一些东西吗?为了handler.post延迟。
【解决方案2】:

有一个更简单的解决方案。

假设您的视图处于 GONE 状态。使其可见的动画:

yourView.setVisibility(View.VISIBLE);
yourView.animate().alpha(1).setDuration(300);

通过同样的方式你可以添加动画监听器。

这也适用于缩放和平移动画。

【讨论】:

    【解决方案3】:

    试试这个

    val shortAnimationDuration = 1000
                yourView.apply {
                    alpha = 0f
                    animate()
                        .alpha(1f)
                        .setDuration(shortAnimationDuration.toLong())
                        .setListener(object :AnimatorListenerAdapter(){
                            override fun onAnimationEnd(animation: Animator?) {
                               //You can add what you want to do after completing animation
                            }
                        })
                }
    

    这是一个淡入动画。如果要淡出,只需交换 alpha 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 2012-01-02
      • 2011-09-19
      • 1970-01-01
      相关资源
      最近更新 更多