RecyclerView 动画 onRemove 与固定项目
RecyclerView animation onRemove with fixed item
我想知道如何强制 RecyclerView 在删除具有固定位置和特定布局的项目之前执行 proper/nice 动画。
我已尝试在此基础上构建 tutorial,在满足我的特定要求之前效果很好。
只需对教程代码进行简单更改:
@Override
public int getItemViewType(int position) {
if(position == 3){
return IREGULAR;
}
return REGULAR;
}
@Override
public ColorViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
if(viewType == REGULAR) {
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
}else{
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_iregular, parent, false);
}
// rest of tutorial code down here
}
@Override
public void onBindViewHolder(ColorViewHolder holder, int position) {
int color;
if(getItemViewType(position) == REGULAR) {
color = colors.get(position);
}else{
color = 0xFF000000;
}
// rest of tutorial code down here
}
所以第三项会高一点,而且总是黑色的。
正如您在上图中看到的那样,在删除第三个位置以下的项目(不规则的)之前,动画工作正常,但是当它在上面时,然后大黑色 space 出现在项目重新绑定的地方。
如何实现更好的动画体验?
删除一行后,必须调用以下方法:
notifyItemRemoved(position);
notifyItemRangeChanged(position, getItemCount());
我想知道如何强制 RecyclerView 在删除具有固定位置和特定布局的项目之前执行 proper/nice 动画。
我已尝试在此基础上构建 tutorial,在满足我的特定要求之前效果很好。
只需对教程代码进行简单更改:
@Override
public int getItemViewType(int position) {
if(position == 3){
return IREGULAR;
}
return REGULAR;
}
@Override
public ColorViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
if(viewType == REGULAR) {
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
}else{
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_iregular, parent, false);
}
// rest of tutorial code down here
}
@Override
public void onBindViewHolder(ColorViewHolder holder, int position) {
int color;
if(getItemViewType(position) == REGULAR) {
color = colors.get(position);
}else{
color = 0xFF000000;
}
// rest of tutorial code down here
}
所以第三项会高一点,而且总是黑色的。
正如您在上图中看到的那样,在删除第三个位置以下的项目(不规则的)之前,动画工作正常,但是当它在上面时,然后大黑色 space 出现在项目重新绑定的地方。 如何实现更好的动画体验?
删除一行后,必须调用以下方法:
notifyItemRemoved(position);
notifyItemRangeChanged(position, getItemCount());