1. ホーム
  2. android

[解決済み] Javaによるフェードイン・フェードアウトのAndroidアニメーション

2022-04-24 11:48:23

質問

ImageViewの2秒間のアニメーションを1000ミリ秒かけてフェードインし、1000ミリ秒かけてフェードアウトさせたいのですが、どうすればいいですか?

ImageViewのコンストラクタの中身はこんな感じです。

Animation fadeIn = new AlphaAnimation(0, 1);
fadeIn.setDuration(1000);

Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setStartOffset(1000);
fadeOut.setDuration(1000);

AnimationSet animation = new AnimationSet(true);
animation.addAnimation(fadeIn);
animation.addAnimation(fadeOut);
this.setAnimation(animation);

そのアニメーションを実行すると 何もない が表示されます。しかし、アルファアニメーションの1つを削除すると、期待通りの動作になります。

すでに試したこと

  • 考えられるあらゆる組み合わせの setFillBefore , setFillAfter および setFillEnabled .
  • を追加する LinearInterpolatorAnimationSet .

解決方法は?

自分自身の問題を把握した。解決策は結局インターポレータを使うことにした。

Animation fadeIn = new AlphaAnimation(0, 1);
fadeIn.setInterpolator(new DecelerateInterpolator()); //add this
fadeIn.setDuration(1000);

Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setInterpolator(new AccelerateInterpolator()); //and this
fadeOut.setStartOffset(1000);
fadeOut.setDuration(1000);

AnimationSet animation = new AnimationSet(false); //change to false
animation.addAnimation(fadeIn);
animation.addAnimation(fadeOut);
this.setAnimation(animation);



Kotlinを使用している場合

val fadeIn = AlphaAnimation(0f, 1f)
fadeIn.interpolator = DecelerateInterpolator() //add this
fadeIn.duration = 1000

val fadeOut = AlphaAnimation(1f, 0f)
fadeOut.interpolator = AccelerateInterpolator() //and this
fadeOut.startOffset = 1000
fadeOut.duration = 1000

val animation = AnimationSet(false) //change to false
animation.addAnimation(fadeIn)
animation.addAnimation(fadeOut)
this.setAnimation(animation)