gpt4 book ai didi

android - 如何仅将android布局动画应用于特定索引以上的子项?

转载 作者:可可西里 更新时间:2023-11-01 19:08:09 26 4
gpt4 key购买 nike

我有一个包含一系列笔记的 ListView。

目前,我使用布局动画在列表首次加载时从侧面滑入所有注释;这非常有效。

但是,我想弄清楚如何仅将布局动画应用于特定点以下的列表项。假设我删除了列表中的一个项目:我希望它下面的所有项目都向上移动到已删除笔记的旧位置。

我已经尝试找到一种方法来通过子索引自定义动画延迟或插值器,但没有找到适合此位置的方法。有没有一种方法可以使用自定义布局动画(例如扩展 LayoutAnimationController)来执行此操作,或者我是否必须执行此低级别操作并分别为每个 View 设置动画?

有什么建议吗?

最佳答案

创建动画并在列表 OnItemClickListener 中调用它。之后,您可以使用适配器的 notifyDataSetChanged 来刷新列表内容。

在这个例子中,我创建了一个名为 removeListItem 的方法,它接收要删除的行以及该行在列表内容数组中的位置。

public class MainActivity extends ListActivity implements OnItemClickListener{

ArrayList<String> values;
ArrayAdapter<String> adapter;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

values = generateMockData(50);

adapter = new ArrayAdapter<String>(
this, android.R.layout.simple_list_item_1, values);

setContentView(R.layout.activity_main);

getListView().setAdapter(adapter);
getListView().setOnItemClickListener(this);
}

private ArrayList<String> generateMockData(int number) {

ArrayList<String> result = new ArrayList<String>();

for(int i = 0; i < number; i++)
result.add(""+i+" "+ (int)Math.random() * 13);

return result;
}

private void removeListItem(View rowView, final int positon) {

Animation anim = AnimationUtils.loadAnimation(this,
android.R.anim.slide_out_right);
anim.setDuration(500);
rowView.startAnimation(anim);

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

public void run() {

values.remove(positon);//remove the current content from the array

adapter.notifyDataSetChanged();//refresh you list

}

}, anim.getDuration());

}

public void onItemClick(AdapterView<?> arg0, View row, int position, long arg3) {

if(position == YOUR_INDEX) //apply your conditions here!
removeListItem(row,position);
}

关于android - 如何仅将android布局动画应用于特定索引以上的子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4658416/

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