以编程方式创建TranslateAnimation,忽略我的setStartOffset()

时间:2015-04-07 13:43:12

标签: android android-animation

我有一个静态方法,在给定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 + delayk * delay),但没有一种方法可行:我看到子视图一起移动,就像延迟被设置为0一样。

我检查了这些值,它们就是我所期望的那样(即,我真的称之为setStartOffset(0)setStartOffset(200)setStartOffset(400)等等。此外,如果我有五个孩子,他们都会在达到最大延迟时开始,一整秒后。就像对setStartOffset()的每次通话都会使startAnimation()来电无效,直到我到达最后一个对象,当它们一起开始时。

为什么这不起作用?

0 个答案:

没有答案