2012-01-27 13 views
9

私は10枚の画像を持っています。私はそれらの間でクロスフェードするアニメーションを作成したいと思います。私はそのようなことを達成するために組み込みのDrawableを探してきましたが、その部分に運がありません。 AnimationDrawableがあり、ピクチャを切り替えることはできますが、スイッチはアニメートされません。 2枚の写真の間にクロスフェードするTransitionDrawableがありますが、2枚以下です。AnimationDrawableへのトランジションを追加する

地獄。

私はGoogleでいくつかの解決策を探しましたが、その部分に運がありません。だから私は自分のdrawableを実装してそのようなことを実現しようと考えています。あなたに指針がありますか?

ありがとうございます。

答えて

15

答えが見つかったのかどうかはわかりませんが、同じ問題があり、TransitionDrawableに基づいて独自のクラスを作成しました。

使用:

CyclicTransitionDrawable ctd = new CyclicTransitionDrawable(new Drawable[] { 
    drawable1, 
    drawable2, 
    drawable3, 
    ... 
}); 

imageView.setImageDrawable(ctd); 

ctd.startTransition(1000, 3000) // 1 second transition, 3 second pause between transitions. 

CyclicTransitionDrawableのコードはavailable on Githubあります。

+0

RelativeLayout私の根の背景を設定している何をすべきかまあ私も私が:-)何をしたか覚えていません。しかし、あなたのソリューションはきれいそうですそれを答えにしましょう! – Redwarp

+0

それは1つのループのためだけにする方法はありますか? – Andy

+0

現在、ループの数を制限する方法はありません。それを追加することはできますが、私は(メモリから)オリジナルのTransitionDrawableクラスを使ってそれを達成できると思います。 –

10

長い時間が経過し、おそらく問題を修正しましたが、AnimationDrawableのsetEnterFaceDuration()を取得しました。例:あなたは1..N画像を通じて簡単にサイクリングを持って、このコードで

mBackgroundAnimation = new AnimationDrawable(); 
mBackgroundAnimation.addFrame(getResources().getDrawable(R.drawable.background1), 5000); 
// ... rest of the frames 
mBackgroundAnimation.addFrame(getResources().getDrawable(R.drawable.background6), 5000); 
mBackgroundAnimation.setEnterFadeDuration(1000); 
mBackgroundAnimation.setOneShot(false); 

、それぞれがフェードインアニメーションで5秒(5000ms)のまま。さて、私は

mLayoutRoot.setBackground(mBackgroundAnimation); 
mLayoutRoot.post(new AnimationStarterThread()); 

そしてAnimationStarterThreadクラス

private class AnimationStarterThread implements Runnable { 
    public void run() { 
     if(mBackgroundAnimation != null) 
      mBackgroundAnimation.start(); 
    } 
} 
関連する問題