如何使LayoutAnimationController为GridView中的每个视图设置动画?

时间:2014-06-30 01:51:24

标签: android gridview

我有一个GridView,按下一个按钮,GridView一次淡入,其中一个视图。这个代码就是:

Animation fadeIn = AnimationUtils.loadAnimation(activity, R.anim.fade_in);
LayoutAnimationController layoutAnimationController = new LayoutAnimationController(fadeIn);
friendsGridView.setLayoutAnimation(layoutAnimationController);
friendsGridView.setVisibility(View.VISIBLE);

这非常好用,但是,如果在动画过程中我向下滑动,所有视图都会突然显示,动画似乎缩短了。我知道GridView会回收视图,所以这对我来说可能不是最佳解决方案,但是当按下按钮时我想让每个视图一次褪色(我不希望它的大小GridView超过~30个视图),如果你向下滑动到还没有褪色的东西,你将不得不等待它淡入(淡入淡出持续时间只有200,并且<30个视图我不会&#39;认为这是一个问题。)

我想知道是否可以根据我上面的代码使用它?或者为了我的目的,我需要创建某种ScrollView并单独为其中的每个孩子制作动画?

编辑:为了我的目的,一个同样合理甚至更好的解决方案是暂停应用程序,直到屏幕上的视图全部淡入。由于大多数屏幕只支持最多30个视图的一小部分,这应该花点时间。所以我想另一个问题是如何在上述内容完成之前暂停任何用户交互?

1 个答案:

答案 0 :(得分:1)

我设法通过在代码中添加以下内容来实现第二个目标:

gridView.setLayoutAnimationListener(new Animation.AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {
        gridView.setEnabled(false);
    }

    @Override
    public void onAnimationEnd(Animation animation) {
        gridView.setEnabled(true);
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
    }
});

与动画听众不同,这只是在整个LayoutAnimationController完成任务后才启动一次。在动画完成之前,它使GridView无法供用户使用。