我有一组10张图片,我想创建一个动画,我在它们之间交叉淡入淡出。我一直在研究内置的Drawable来实现这样的功能,但是那部分没有运气。 有一些AnimationDrawable可以在图片之间切换,但它不会为交换机设置动画。 有一个TransitionDrawable,它在两张图片之间交叉淡入淡出,但不超过两张。
地狱。
我在谷歌上找了一些解决方案,但那部分没有运气。所以我正在考虑实现我自己的drawable来实现这样的事情。你们中的任何人都有指点吗?
提前致谢。
答案 0 :(得分:18)
不确定您是否找到了答案,但我遇到了同样的问题,最终基于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。
答案 1 :(得分:11)
好。很长一段时间过去了,你可能已经解决了这个问题,但你得到了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图像轻松循环,每个图像保持5s(5000ms)并带有淡入动画。现在,我所做的是设置我的根RelativeLayout的背景
mLayoutRoot.setBackground(mBackgroundAnimation);
mLayoutRoot.post(new AnimationStarterThread());
还有AnimationStarterThread类
private class AnimationStarterThread implements Runnable {
public void run() {
if(mBackgroundAnimation != null)
mBackgroundAnimation.start();
}
}