如何在 notifyDataSetChanged 上为 recyclerView 设置动画?
How to animate recyclerView on notifyDataSetChanged?
我有一个 recyclerview,它是一个文件夹列表。
当我单击一个项目时,该文件夹内的 folders/files 是新列表。
我想播放滑出旧列表并滑入新列表的动画。
它应该看起来像进入或离开目录。
我是这样实现的:
// rv : RecyclerView
rv.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_out_to_left))
adapter.list = list
rv.notifyDataSetChanged()
rv.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_in_from_right))
但是只有后面的动画在播放?
我唯一能想到的是 notifyDataSetChanged() 非常具有破坏性,它可能在您的动画开始之前就被调用了。
我的建议是延迟
adapter.list = list
rv.notifyDataSetChanged()
rv.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_in_from_right))
直到
rv.startAnimation(AnimationUtils.loadAnimation(context,R.anim.slide_out_to_left))
有足够的时间运行。
这是对先前答案的 link,展示了如何设置 onAnimationFinished 侦听器,该侦听器应侦听第一个动画完成。
Detect animation finish in Android's RecyclerView
Animation animation = AnimationUtils.loadAnimation(getContext(),R.anim.slide_out_to_left);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) { }
@Override
public void onAnimationEnd(Animation animation) {
adapter.list = list;
adapter.notifyDataSetChanged();
rv.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_in_from_right));
}
@Override
public void onAnimationRepeat(Animation animation) {}
});
rv.startAnimation(animation));
我有一个 recyclerview,它是一个文件夹列表。 当我单击一个项目时,该文件夹内的 folders/files 是新列表。 我想播放滑出旧列表并滑入新列表的动画。 它应该看起来像进入或离开目录。
我是这样实现的:
// rv : RecyclerView
rv.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_out_to_left))
adapter.list = list
rv.notifyDataSetChanged()
rv.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_in_from_right))
但是只有后面的动画在播放?
我唯一能想到的是 notifyDataSetChanged() 非常具有破坏性,它可能在您的动画开始之前就被调用了。
我的建议是延迟
adapter.list = list
rv.notifyDataSetChanged()
rv.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_in_from_right))
直到
rv.startAnimation(AnimationUtils.loadAnimation(context,R.anim.slide_out_to_left))
有足够的时间运行。 这是对先前答案的 link,展示了如何设置 onAnimationFinished 侦听器,该侦听器应侦听第一个动画完成。 Detect animation finish in Android's RecyclerView
Animation animation = AnimationUtils.loadAnimation(getContext(),R.anim.slide_out_to_left);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) { }
@Override
public void onAnimationEnd(Animation animation) {
adapter.list = list;
adapter.notifyDataSetChanged();
rv.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_in_from_right));
}
@Override
public void onAnimationRepeat(Animation animation) {}
});
rv.startAnimation(animation));