我有一个静态方法,在给定ViewGroup容器的情况下,它基本上为所有子视图设置动画。每个视图都使用相同的TranslateAnimation
对象进行动画处理,我以编程方式创建该对象。
但是,我想在每个视图的动画之间实现某种延迟,由delayMillis
输入参数给出:
public static void slideInChilds(ViewGroup container, long delayMillis, int... childsAt) {
// ... stuff
TranslateAnimation anim = new TranslateAnimation(type, fromX, type, toX, type, fromY, type, toY);
anim.setDuration(200);
anim.setFillEnabled(true); anim.setFillAfter(true); anim.setFillBefore(true);
anim.setInterpolator(new AccelerateDecelerateInterpolator());
container.setVisibility(View.VISIBLE);
for (int k : childsAt) {
anim.setStartOffset(k * delayMillis);
container.getChildAt(k).startAnimation(anim);
//OR:
//container.getChildAt(k).startAnimation(anim);
//anim.setStartOffset(anim.getStartOffset() + delayMillis)
}
}
所以基本上我会迭代一组视图(索引),每次我将setStartOffset()
增加delayMillis
金额。正如您所看到的,我采用了两种不同的方式(currentOffset + delay
或k * delay
),但没有一种方法可行:我看到子视图一起移动,就像延迟被设置为0一样。
我检查了这些值,它们就是我所期望的那样(即,我真的称之为setStartOffset(0)
,setStartOffset(200)
,setStartOffset(400)
等等。此外,如果我有五个孩子,他们都会在达到最大延迟时开始,一整秒后。就像对setStartOffset()
的每次通话都会使startAnimation()
来电无效,直到我到达最后一个对象,当它们一起开始时。
为什么这不起作用?