Android如何在多个动画上添加一些延迟?

时间:2012-02-18 13:09:50

标签: android android-animation

我想要的是每个动画,从下面的代码开始,像一个序列一样延迟。所以我有这个代码:

   public void setAnimation(){
        View view;
        String animation = prefs.getString("animations", "Scale");
        String interpolator = prefs.getString("interpolators", "Bounce");
        Animation animate = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.scale_in);
        for(int i=0; i<gridView.getChildCount(); i++){
            view = gridView.getChildAt(i);

            view.startAnimation(animate);
        }
    }

因为有一个for循环,所有子动画都会立即开始。我已经尝试过:

Thread.sleep....
Handler...
animate.setStartTime...
animate.setStartOffset...

但所有儿童动画都会立即开始。

我在循环内尝试了这个方法,动画无法启动:

animate.setAnimationListener(new AnimationListener(){
    public void onAnimationEnd(Animation arg0) {
        view.startAnimation(animate);
    }

    public void onAnimationRepeat(Animation arg0) {
    }

    public void onAnimationStart(Animation arg0) {
    }

});

提前完成。

2 个答案:

答案 0 :(得分:0)

解决方案是创建GridLayoutAnimationController或LayoutAnimationController。

答案 1 :(得分:0)

我使用 LayoutAnimationController 使用以下代码逐个显示带有动画效果的 LinearLayout 中的元素。

     Animation fadeIn = AnimationUtils.loadAnimation(context, R.anim.anim_fade_in);
//lnrContactContainer is LinearLayout.
            AnimationSet set = new AnimationSet(true);
            set.addAnimation(fadeIn);
            set.setDuration(500);
            controller = new LayoutAnimationController(set, 1f);
            lnrContactContainer.setLayoutAnimation(controller);          
            lnrContactContainer.setVisibility(View.VISIBLE);

但是当我使用它来隐藏 LinearLayout lnrContactContainer.setVisibility(View.GONE)时显示淡出动画时,同样的方法不起作用;