Cop*_*y33 5 animation android android-animation android-layout android-recyclerview
我正在尝试实现一个待办事项列表,该列表在活动页面上包含一个列表及其下的一些其他视图。
我LinearLayout在整个页面和RecyclerView列表中都使用,以及RecyclerView(ImageView,Buttons...等)下面的其他视图
这是我的最终视图层次结构:
<LinearLayout>
<TextView />
<RecyclerView />
<Button />
<EditText />
<ImageView />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我已经实现了RecyclerView可以在其中添加和删除项目的地方。我正在使用LinearLayoutManager而未指定ItemAnimatorso DefaultItemAnimator则被使用。
将项目添加到列表中可以正常工作。我的问题是,当我从中删除项目时RecyclerView(通过先从数据集中删除项目然后使用RecyclerViewAdapter.notifyItemRemoved),页面的动画效果不佳。
发生的情况是,整个页面首先对齐以适应新的RecyclerView高度,然后RecyclerView项目删除动画完成,这使得页面的行为看起来很奇怪,因为下面的所有视图都被RecyclerView对齐,而删除的项目逐渐淡出但没有牛逼失去了它的高度还没有,那么剩余的RecyclerView项目(已删除的项目如下图)滚动起来,看上去就像他们从墙下往上滑动。
我试图在网络上寻找解决方案,却找不到任何能解决我问题的方法。
我发现这个无法回答的问题描述了同样的问题。如果我的解释不够清楚,请参考它。
有人遇到同样的问题吗?有什么建议么?
谢谢。
尝试一下这个并检查它是否按照您的预期工作:
recyclerView.setHasFixedSize(true);
recyclerView.setItemAnimator(new MyAnim());
public static class MyAnim extends RecyclerView.ItemAnimator {
@Override
public boolean animateDisappearance(@NonNull RecyclerView.ViewHolder viewHolder, @NonNull ItemHolderInfo preLayoutInfo, @Nullable ItemHolderInfo postLayoutInfo) {
return false;
}
@Override
public boolean animateAppearance(@NonNull RecyclerView.ViewHolder viewHolder, @Nullable ItemHolderInfo preLayoutInfo, @NonNull ItemHolderInfo postLayoutInfo) {
return false;
}
@Override
public boolean animatePersistence(@NonNull RecyclerView.ViewHolder viewHolder, @NonNull ItemHolderInfo preLayoutInfo, @NonNull ItemHolderInfo postLayoutInfo) {
return false;
}
@Override
public boolean animateChange(@NonNull RecyclerView.ViewHolder oldHolder, @NonNull RecyclerView.ViewHolder newHolder, @NonNull ItemHolderInfo preLayoutInfo, @NonNull ItemHolderInfo postLayoutInfo) {
final float prevAlpha = ViewCompat.getAlpha(oldHolder.itemView);
ViewCompat.setAlpha(oldHolder.itemView, prevAlpha);
ViewCompat.setAlpha(newHolder.itemView, 0);
return true;
}
@Override
public void runPendingAnimations() {
}
@Override
public void endAnimation(RecyclerView.ViewHolder item) {
}
@Override
public void endAnimations() {
}
@Override
public boolean isRunning() {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2070 次 |
| 最近记录: |