动画淡入淡出

时间:2013-01-04 12:02:25

标签: android android-animation

使用此代码我只有淡入淡出,我正在寻找如何添加淡出。我添加了另一个名为“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>

9 个答案:

答案 0 :(得分:39)

这是我的解决方案。它使用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();
}

答案 1 :(得分:20)

这是 Fade In and Fade Out Animation with Alpha Effect

的好例子

Animate Fade In Fade Out

更新:

选中此answer可能会对您有所帮助

答案 2 :(得分:3)

我一直在Kotlin工作(向大家推荐),所以语法可能有点偏差。 我所做的只是致电:

false

我认为,在Java中,它将是以下内容:

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

尝试:

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

答案 3 :(得分:2)

根据文件AnimationSet

  

表示应该一起播放的一组动画。该   每个动画的转换组合在一起   一个变换。如果AnimationSet设置了它的任何属性   孩子们也设置(例如,持续时间或fillBefore),值   AnimationSet覆盖子值

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

如果此集合中的所有动画都应使用,则传递true   与此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);

我希望这会对你有所帮助。

答案 4 :(得分:0)

我们可以简单地使用:

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文件夹中的图像。

答案 5 :(得分:0)

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

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 :(得分:0)

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

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

示例I USED LottieAnimation

答案 7 :(得分:0)

你也可以在 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

答案 8 :(得分:0)

今天,我被这个问题困住了。这对我有用:


    @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()
    }