【发布时间】:2013-04-08 23:31:50
【问题描述】:
我有一个布局的 GridView,可以动态添加或删除到网格中。
在 iOS 中,GridView 项目的本机行为是让网格中的其他项目滑动到已删除项目的位置,或者在添加新项目时滑动以腾出空间。
但在 Android 上,该行为只是为了让更改立即出现在屏幕上。我尝试使用 GridView 适配器中的一些技巧向每个 getView() 调用添加自定义动画,但这最终导致了一些问题:
Android GridView loading the 0 indexed item in a later index's slot when data set changes
我尝试让单个视图控制动画而不是适配器的 getView() 方法,但最终结果是相同的。
我也尝试过使用 GridLayoutAnimationController,像这样:
Animation animation = AnimationUtils.loadAnimation(mActivity, R.anim.grid_item_fadein);
GridLayoutAnimationController controller = new GridLayoutAnimationController(animation, .2f, .2f);
mGrid.setLayoutAnimation(controller);
这适用于所有 GridView 内容的初始加载,但对该内容的任何更改都会像默认情况一样立即弹出。
我觉得这是一个非常简单的功能,应该有更简单的方法来做到这一点。我从在线搜索中看到的最好的是a library,它动画 GridView 项目交换网格中的位置,但这不是我正在寻找的(在同一个库中,当你从网格中删除一个项目时通过删除相同的即时效果,我试图避免发生)。
我还看到的关于 SO 的常见答案是“查看 APIDemos,有大量示例。”但据我所知,实际上并没有动画 GridView 内容更改的示例。
感谢您的帮助。
【问题讨论】:
-
您要添加什么类型的动画?添加 xml 属性“animateLayoutChanges = true”将为几乎任何视图提供一些基本的流体动画。
-
这是我尝试的第一件事,不幸的是它不起作用。
-
五月,我知道如何停止这个动画了。
标签: android