30

このコードを使用すると、フェードインしかありません。フェードアウトも追加する方法を探しています。「フェードアウト」という別の 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 に答える
2

ドキュメントによると AnimationSet

一緒に再生するアニメーションのグループを表します。個々のアニメーションの変換は、1 つの変換にまとめられます。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

FOR FADE では、最初の行にアニメーションのオブジェクトを追加します。

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

例えば私はLottieAnimationを使いました

于 2020-11-02T12:03:16.823 に答える