如何使列表的每个ImageView逐个启动动画?

时间:2016-11-19 18:34:13

标签: java android animation imageview

我是Android新手,我有9个ImageView我希望透明。我使用AlphaAnimation让它们褪色。它们确实褪色,但我想让它们一个接一个地消失。不幸的是,它们都在一起消失,我不知道为什么。  我尝试使用各种方法(包括CountDownTimerThread.sleep()new Handler().postDelayed()),但没有任何变化。所有的ImageViews都会同时淡出,而不是逐个淡出。我知道他们能够做到这一点,因为一个人的动画可以工作,但是这些视图的列表中的迭代最终会同时被动画化。

重要方法(我猜):

   private void fadeImageTiles(List<ImageView> ivs) {
        Collections.shuffle(ivs);

        for (ImageView iv : ivs) {
          //maybe there's problem with iteration?
            gradientFade(iv);
        }
    }

    private void gradientFade(ImageView iv){
        AlphaAnimation animation = new AlphaAnimation(1f,0f);
        animation.setDuration(2000);
        iv.startAnimation(animation);
        iv.setVisibility(View.INVISIBLE);
    }

最后的效果是让它们随机褪色显露背后的图像

1 个答案:

答案 0 :(得分:0)

您可以使用void setStartOffset (long startOffset)指定视图应设置动画的时间长度。 例如:

private void fadeImageTiles(List<ImageView> ivs) {
    Collections.shuffle(ivs);

    for (int i = 0; i < ivs.size(); i++) {
      //maybe there's problem with iteration?
        gradientFade(ivs.get(i), i);
    }
}

private void gradientFade(ImageView iv, int index){
    AlphaAnimation animation = new AlphaAnimation(1f,0f);
    animation.setDuration(2000);
    animation.setStartOffset(index * 500);
    iv.startAnimation(animation);
    iv.setVisibility(View.INVISIBLE);
}

或者您可以使用ViewPropertyAnimator而无需编写太多代码。使用以下代码替换gradientFade方法中的代码:

iv.animate().alpha(0).setDuration(2000).setStartDelay(index * 500);