ListView 中的过渡以替换所有元素
Transition in ListView to replace all elements
我有一个显示状态列表的 ListView
。每当用户选择一个州时,我都会加载处于该州的城市列表。为此,我有一个管理器,无论何时选择一个项目,都会用该项目的子项替换我的自定义 BaseAdapter
读取的基础列表。
问题是,这工作正常,但项目只是当场替换,我真的想要一个很好的过渡,也就是说,状态列表向左移动并被替换来自另一边的城市列表
是否有 class 或方法可以帮助我制作动画?我想到的唯一选择是保留两个不同的 Listview
并使第一个淡出而另一个淡入。这不是最优雅的解决方案,我想知道是否可以只用一个 ListView
我不确定如何使用 ListView
执行此操作,但我知道您可以使用 RecyclerView
并在适配器的 onBindViewHolder
方法中添加动画。
当您调用 notifyDataSetChanged()
.
时,此方法会为每个可见项目调用一次
编辑:
像这样:
一些Class:
RecyclerView recyclerv;
MyAdapter mAdapter;
LinearLayoutManager mLayoutManager;
List<String> mDataset;
//instantiate recyclerview, adapter, layoutmanager, dataset. populate dataset.
recyclerv.setDataset(mDataset);
MyAdapter.java:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<String> dataset;
public MyAdapter(){}
//extend ViewHolder class here
public class ViewHolder extends RecyclerView.Holder { ... }
//implement onCreateViewHolder
/*implement onBindViewHolder.
*animate your view here, but be sure to add an animation count
else the items will keep getting animated everytime a new item appears */
//implement getItemCount
public void setDataset(List<String> dataset) {
this.dataset = dataset;
notifyDataSetChanged(); //this will trigger onBindViewHolder for every visible item
}
}
我有一个显示状态列表的 ListView
。每当用户选择一个州时,我都会加载处于该州的城市列表。为此,我有一个管理器,无论何时选择一个项目,都会用该项目的子项替换我的自定义 BaseAdapter
读取的基础列表。
问题是,这工作正常,但项目只是当场替换,我真的想要一个很好的过渡,也就是说,状态列表向左移动并被替换来自另一边的城市列表
是否有 class 或方法可以帮助我制作动画?我想到的唯一选择是保留两个不同的 Listview
并使第一个淡出而另一个淡入。这不是最优雅的解决方案,我想知道是否可以只用一个 ListView
我不确定如何使用 ListView
执行此操作,但我知道您可以使用 RecyclerView
并在适配器的 onBindViewHolder
方法中添加动画。
当您调用 notifyDataSetChanged()
.
编辑:
像这样:
一些Class:
RecyclerView recyclerv;
MyAdapter mAdapter;
LinearLayoutManager mLayoutManager;
List<String> mDataset;
//instantiate recyclerview, adapter, layoutmanager, dataset. populate dataset.
recyclerv.setDataset(mDataset);
MyAdapter.java:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<String> dataset;
public MyAdapter(){}
//extend ViewHolder class here
public class ViewHolder extends RecyclerView.Holder { ... }
//implement onCreateViewHolder
/*implement onBindViewHolder.
*animate your view here, but be sure to add an animation count
else the items will keep getting animated everytime a new item appears */
//implement getItemCount
public void setDataset(List<String> dataset) {
this.dataset = dataset;
notifyDataSetChanged(); //this will trigger onBindViewHolder for every visible item
}
}