【问题标题】:Animation fade in and out动画淡入淡出
【发布时间】:2012-12-18 20:57:57
【问题描述】:

使用此代码我只有淡入,我也在寻找如何添加淡出。我添加了另一个名为“fadeout”的 xml,但我无法将它集成到我的代码中。

ImageView imageView = (ImageView)findViewById(R.id.imageView);
Animation fadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fadein);
imageView.startAnimation(fadeInAnimation);

button1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        imageView.startAnimation(fadeInAnimation);
    }
}

fadein.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="Your Duration(in milisecond)"
    android:repeatCount="infinite"/>
 </set>

【问题讨论】:

    标签: android android-animation


    【解决方案1】:

    今天,我遇到了这个问题。这对我有用:

    
        @JvmStatic
        fun setFadeInFadeOutAnimation(v: View?) {
            val fadeIn = ObjectAnimator.ofFloat(v, "alpha", 0.0f, 1f)
            fadeIn.duration = 300
            val fadeOut = ObjectAnimator.ofFloat(v, "alpha", 1f, 0.0f)
            fadeOut.duration = 2000
    
            fadeIn.addListener(object : AnimatorListenerAdapter(){
                override fun onAnimationEnd(animation: Animator?) {
                    fadeOut.start()
                }
            })
            fadeIn.start()
        }
    

    【讨论】:

      【解决方案2】:

      你也可以像这样在 kotlin 中这样做:

          contentView.apply {
              // Set the content view to 0% opacity but visible, so that it is visible
              // (but fully transparent) during the animation.
              alpha = 0f
              visibility = View.VISIBLE
      
              // Animate the content view to 100% opacity, and clear any animation
              // listener set on the view.
              animate()
                      .alpha(1f)
                      .setDuration(resources.getInteger(android.R.integer.config_mediumAnimTime).toLong())
                      .setListener(null)
          }
      

      read more about this in android docs

      【讨论】:

        【解决方案3】:

        我一直在使用 Kotlin(推荐给大家),所以语法可能有点不对。 我所做的只是简单地调用:

        v.animate().alpha(0f).duration = 200
        

        我认为,在 Java 中,应该是这样的:

        v.animate().alpha(0f).setDuration(200);
        

        试试:

        private void hide(View v, int duration) {
            v.animate().alpha(0f).setDuration(duration);
        }
        
        private void show(View v, int duration) {
            v.animate().alpha(1f).setDuration(duration);
        }
        

        【讨论】:

        • 你最后忘了加“;”,Like = v.animate().alpha(0f).setDuration(200);
        【解决方案4】:

        FOR FADE 将第一行添加到动画对象中。

        .animate().alpha(1).setDuration(2000);
        

        例如

        【讨论】:

          【解决方案5】:

          请尝试以下代码重复淡出/淡入动画

          AlphaAnimation anim = new AlphaAnimation(1.0f, 0.3f);
              anim.setRepeatCount(Animation.INFINITE);
              anim.setRepeatMode(Animation.REVERSE);
              anim.setDuration(300);
          view.setAnimation(anim); // to start animation
          view.setAnimation(null); // to stop animation
          

          【讨论】:

            【解决方案6】:

            我们可以简单地使用:

            public void animStart(View view) {
                if(count==0){
                    Log.d("count", String.valueOf(count));
                    i1.animate().alpha(0f).setDuration(2000);
                    i2.animate().alpha(1f).setDuration(2000);
                    count =1;
                }
                else if(count==1){
                    Log.d("count", String.valueOf(count));
                    count =0;
                    i2.animate().alpha(0f).setDuration(2000);
                    i1.animate().alpha(1f).setDuration(2000);
                }
            }
            

            其中 i1 和 i2 在 onCreateView() 中定义为:

                i1 = (ImageView)findViewById(R.id.firstImage);
                i2 = (ImageView)findViewById(R.id.secondImage);
            

            count 是一个初始化为 0 的类变量。

            XML 文件是:

                <?xml version="1.0" encoding="utf-8"?>
                <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:app="http://schemas.android.com/apk/res-auto"
                    xmlns:tools="http://schemas.android.com/tools"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    tools:context=".MainActivity">
                    <ImageView
                        android:id="@+id/secondImage"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:onClick="animStart"
                        android:src="@drawable/second" />
                  <ImageView
                      android:id="@+id/firstImage"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
            
                      android:onClick="animStart"
                      android:src="@drawable/first" />
                </RelativeLayout>
            

            @drawable/first@drawable/second是res中drawable文件夹中的图片。

            【讨论】:

              【解决方案7】:

              这是我的解决方案。它使用 AnimatorSet。 AnimationSet 库有太多问题,无法正常工作。这提供了淡入和淡出之间的无缝和无限过渡。

              public static void setAlphaAnimation(View v) {
                  ObjectAnimator fadeOut = ObjectAnimator.ofFloat(v, "alpha",  1f, .3f);
                  fadeOut.setDuration(2000);
                  ObjectAnimator fadeIn = ObjectAnimator.ofFloat(v, "alpha", .3f, 1f);
                  fadeIn.setDuration(2000);
              
                  final AnimatorSet mAnimationSet = new AnimatorSet();
              
                  mAnimationSet.play(fadeIn).after(fadeOut);
              
                  mAnimationSet.addListener(new AnimatorListenerAdapter() {
                      @Override
                      public void onAnimationEnd(Animator animation) {
                          super.onAnimationEnd(animation);
                          mAnimationSet.start();
                      }
                  });
                  mAnimationSet.start();
              }
              

              【讨论】:

                【解决方案8】:

                根据文档AnimationSet

                表示应该一起播放的一组动画。这 每个单独动画的变换都组合在一起 一个单一的变换。如果 AnimationSet 设置了它的任何属性 children 还设置(例如,duration 或 fillBefore), AnimationSet 覆盖子值

                AnimationSet mAnimationSet = new AnimationSet(false); //false means don't share interpolators
                

                如果这个集合中的所有动画都应该使用 与此 AnimationSet 关联的插值器。如果每个都传递 false 动画应该使用自己的插值器。

                ImageView imageView= (ImageView)findViewById(R.id.imageView);
                Animation fadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_in);
                Animation fadeOutAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out);
                mAnimationSet.addAnimation(fadeInAnimation);
                mAnimationSet.addAnimation(fadeOutAnimation);
                imageView.startAnimation(mAnimationSet);
                

                希望对你有帮助。

                【讨论】:

                  【解决方案9】:

                  这是 Fade In and Fade Out Animation with Alpha Effect

                  的好例子

                  Animate Fade In Fade Out

                  更新:

                  检查这个answer可能对你有帮助

                  【讨论】:

                  • 不准确:淡出后图像显示无淡入效果,淡入也一样。
                  猜你喜欢
                  • 2014-01-20
                  • 2019-02-11
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-11-14
                  • 2014-10-24
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多