2012-01-27 48 views
9

我有一組10個圖像,並且我想創建一個動畫,在其間淡入淡出。我一直在研究內置Drawable來實現這樣的事情,但在那一部分沒有運氣。 有AnimationDrawable,它可以在圖片之間切換,但不會爲開關設置動畫。 有TransitionDrawable,兩個圖片之間淡入淡出,但不超過兩個。將轉換添加到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

嗯,我甚至不記得我做過什麼:-)但你的解決方案看起來非常乾淨,所以讓我們將其標記爲答案! – Redwarp 2012-07-23 12:41:06

+0

有沒有辦法讓它只有一個循環? – Andy 2012-09-20 21:09:51

+0

目前無法限制循環次數。雖然可以添加,但我認爲(從內存中)可以使用原始的TransitionDrawable類來實現。 – 2012-09-23 14:08:52

10

好吧。很長一段時間過去了,你可能已經解決了這個問題,但是你得到了AnimationDrawable的setEnterFaceDuration()。例如:

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); 

有了這個代碼你必須通過1..N圖像的容易循環,每一個保持5秒(5000毫秒)與淡入動畫。現在,我做的是設置我的根的背景RelativeLayout的

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

而且AnimationStarterThread類

private class AnimationStarterThread implements Runnable { 
    public void run() { 
     if(mBackgroundAnimation != null) 
      mBackgroundAnimation.start(); 
    } 
}