30

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

淡入淡出.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>
4

9 回答 9

40

这是我的解决方案。它使用 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();
}
于 2014-08-27T20:00:21.700 回答
20

这是一个很好的例子Fade In and Fade Out Animation with Alpha Effect

动画淡入淡出

更新 :

检查这个答案可能对你有帮助

于 2013-01-04T12:29:29.663 回答
16

我一直在 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);
}
于 2017-09-28T17:10:59.040 回答
2

根据文档 AnimationSet

表示应该一起播放的一组动画。每个单独动画的变换组合在一起成为一个变换。如果 AnimationSet 设置了其子级也设置的任何属性(例如,duration 或 fillBefore),则 AnimationSet 的值将覆盖子级值

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

如果此集中的所有动画都应使用与此 AnimationSet 关联的插值器,则传递 true。如果每个动画都应该使用自己的插值器,则传递 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);

我希望这能帮到您。

于 2016-01-21T08:38:12.383 回答
1

我们可以简单地使用:

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

于 2018-10-08T16:41:44.050 回答
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)
    }

在 android 文档中阅读有关此内容的更多信息

于 2021-01-21T09:17:32.863 回答
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()
    }
于 2021-06-20T08:04:25.623 回答
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
于 2020-10-31T16:11:27.573 回答
0

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

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

例如我用了 LottieAnimation

于 2020-11-02T12:03:16.823 回答