gpt4 book ai didi

android - 如何动画添加或删除 Android ListView 行

转载 作者:IT老高 更新时间:2023-10-28 12:52:50 35 4
gpt4 key购买 nike

在 iOS 中,有一个非常简单而强大的工具来动画 UITableView 行的添加和删除,here's a clip from a youtube video显示默认动画。请注意周围的行如何折叠到已删除的行上。此动画可帮助用户跟踪列表中的更改以及数据更改时他们查看的列表中的位置。

自从我一直在 Android 上进行开发以来,我发现没有等效的工具可以为 TableView 中的各个行设置动画。 .调用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 实现/分支,但这似乎不应该那么困难。

谢谢!

最佳答案

Animation anim = AnimationUtils.loadAnimation(
GoTransitApp.this, android.R.anim.slide_out_right
);
anim.setDuration(500);
listView.getChildAt(index).startAnimation(anim );

new Handler().postDelayed(new Runnable() {

public void run() {

FavouritesManager.getInstance().remove(
FavouritesManager.getInstance().getTripManagerAtIndex(index)
);
populateList();
adapter.notifyDataSetChanged();

}

}, anim.getDuration());

用于自上而下的动画:

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="20%p" android:toYDelta="-20"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>

关于android - 如何动画添加或删除 Android ListView 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3928193/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com