2012-01-27 50 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(); 
    } 
}