ADNROID で比較的単純なものを実装しようとしています。リストにたくさんの Drawables が保存されています。フェードイン効果を使用して、ドローアブルを 1 つずつ重ねて表示する効果を作成したいと考えています。
以下のコードで部分的に成功しました。実際、私の電話 (Nexus S) では問題なく動作しますが、タブレット (ASUS TF101) ではちらつきが見られます。これはおそらく、タブレットの CPU が高速であるためです。
これが私のセットアップですdrawables
。リストにすべてのドローアブルを保存しました。また、レイアウトに 2 つの画像を定義し、一方を他方の上に重ねましimageViewForeground
たimageViewBackground
。
背景画像を最初に設定してから、前景画像がアルファ 0 からアルファ 1 に移動するアニメーションを開始するという考え方です。次に、背景を新しい前景画像に置き換え、新しい前景 (つまり、次のドローアブル) を選択し、永遠にループします。
このcounter
オブジェクトは、int カウンターの単純なラッパーです。
これが私のコードです:
final Animation fadeInAnimation = new AlphaAnimation(0f, 1f);
fadeInAnimation.setDuration(2000);
fadeInAnimation.setStartOffset(3000);
fadeInAnimation.setFillBefore(false);
fadeInAnimation.setFillAfter(true);
fadeInAnimation.setRepeatCount(Animation.INFINITE);
fadeInAnimation.setRepeatMode(Animation.RESTART);
fadeInAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
imageViewForeground.setImageDrawable(drawables.get(counter.value()));
Log.d(TAG, "onAnimationStart");
}
@Override
public void onAnimationEnd(Animation animation) {
Log.d(TAG, "onAnimationEnd");
}
@Override
public void onAnimationRepeat(Animation animation) {
imageViewBackground.setImageDrawable(drawables.get(counter.value()));
counter.increase();
// the problem appears in this line,
// where the foreground becomes visible for a very small period,
// causing the flickering
imageViewForeground.setImageDrawable(drawables.get(counter.value()));
}
});
imageViewForeground.startAnimation(fadeInAnimation);
このちらつきの問題を克服する方法はありますか?