我有一个GridView布局,可以动态添加或删除到网格.
在iOS中,GridView项目的本机行为是网格中的其他项目滑入已删除项目的位置,或者在添加新项目时滑动以腾出空间.
但是在Android上,行为只是为了立即弹出屏幕上的更改.我尝试使用GridView适配器中的一些技巧为每个getView()调用添加自定义动画,但这最终导致了一些问题:
当数据集发生变化时,Android GridView在后面的索引槽中加载0索引项
我尝试让各个视图控制动画而不是适配器的getView()方法,但最终结果是相同的.
我也尝试过使用GridLayoutAnimationController,如下所示:
Animation animation = AnimationUtils.loadAnimation(mActivity, R.anim.grid_item_fadein);
GridLayoutAnimationController controller = new GridLayoutAnimationController(animation, .2f, .2f);
mGrid.setLayoutAnimation(controller);
Run Code Online (Sandbox Code Playgroud)
这适用于所有GridView内容的初始加载,但对该内容的任何更改都会像默认情况一样立即弹出.
我觉得这是一个非常简单的功能,应该有一个更简单的方法来做到这一点.我在网上搜索时看到的最好的是一个库,它可以激活GridView中交换位置的GridView项目,但这不是我想要的(在同一个库中,当你通过删除从Grid中删除一个项目时)我试图避免的同样的即时效果发生).
关于SO的一个常见答案我也看到过"看看APIDemos,有很多例子." 但据我所知,实际上没有动画GridView内容更改的示例.
任何帮助表示赞赏,谢谢.
Chet Haase发布了一个关于如何正确处理ListView动画的精彩视频.基本概念可以应用于GridViews.你可以在这里找到视频.
如果您正在开发API 1.0+,则除非使用NineOldAndroids,否则您将无法使用视频提及的引用动画功能(例如ViewPropertyAnimator).