【发布时间】:2011-04-25 02:23:12
【问题描述】:
在 iOS 中,有一个非常简单而强大的工具来动画添加和删除 UITableView 行,here's a clip from a youtube video 显示默认动画。请注意周围的行如何折叠到已删除的行上。此动画可帮助用户跟踪列表中的更改以及数据更改时他们查看的列表中的位置。
自从我一直在 Android 上进行开发以来,我发现没有类似的工具可以为 TableView 中的各个行设置动画。在我的 Adapter 上调用 notifyDataSetChanged() 会导致 ListView 立即使用新信息更新其内容。我想在数据更改时显示一个新行推入或滑出的简单动画,但我找不到任何记录在案的方法来做到这一点。看起来LayoutAnimationController 可能是让它工作的关键,但是当我在我的 ListView 上设置一个 LayoutAnimationController(类似于ApiDemo's LayoutAnimation2)并在列表显示后从我的适配器中删除元素时,元素会立即消失而不是变得生动起来。
我还尝试了以下方法来在单个项目被删除时对其进行动画处理:
@Override
protected void onListItemClick(ListView l, View v, final int position, long id) {
Animation animation = new ScaleAnimation(1, 1, 1, 0);
animation.setDuration(100);
getListView().getChildAt(position).startAnimation(animation);
l.postDelayed(new Runnable() {
public void run() {
mStringList.remove(position);
mAdapter.notifyDataSetChanged();
}
}, 100);
}
但是,动画行周围的行不会移动位置,直到调用notifyDataSetChanged() 时它们跳转到新位置。似乎 ListView 在放置元素后不会更新其布局。
虽然我想到了编写自己的 ListView 实现/分支,但这似乎不应该那么困难。
谢谢!
【问题讨论】:
-
有人找到答案了吗?请分享
-
@Alex:你有没有像 youtube 视频(如 iphone)那样制作动画,如果你有任何 android 的演示或链接,请给我,我尝试在 xml 文件中使用 animateLayoutChanges,但它不完全像 iphone
-
@Jayesh,很遗憾我不再从事 Android 开发工作。我还没有测试过 2012 年左右之后写的这个问题的任何答案。
标签: android listview animation