我正在试着做这个动画:

若要插入新项,其他项将按默认方式下移。但第一项和第二项更改。第一个是使用ViewType 1插入的,然后第二个将ViewType切换为2。我目前管理3种视图类型(adaptadorNotificaciones.java)。
1个完整尺寸。notificacion_item1.xml
3分隔符。section.xml
我对DefaultItemAnimator进行了如下扩展(animadroNotificaciones):
public class animadroNotificaciones extends DefaultItemAnimator {
@Override
public boolean animateAdd(RecyclerView.ViewHolder holder){
return true;
}
public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromX, int fromY, int toX, int toY){
return super.animateChange(oldHolder,newHolder,fromX,fromY,toX,toY);
}
@Override
public void onAnimationFinished(RecyclerView.ViewHolder holder){
super.onAnimationFinished(holder);
}
@Override
public boolean animateMove(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY){
return super.animateMove(holder,fromX,fromY,toX,toY);
}}我也把它想象成一个堆栈:
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
llm.setReverseLayout(true);
llm.setStackFromEnd(true);
recyclerView.setLayoutManager(llm);因此,当我添加一个项目时,滚动条必须向上移动:
recyclerView.scrollToPosition(arreglo.size()-1);插入项目的完整代码(adaptadorNotificaciones.java):
public void addNotificacion(ItemLista notificacion,RecyclerView recyclerView){
String mesAnterior = "";
String mesInsertado = "";
if(arreglo.size()!=0)
mesAnterior = ManejadorFechas.getFecha(arreglo.get(arreglo.size()-1).getTiempo(),false);
mesInsertado = ManejadorFechas.getFecha(notificacion.getTiempo(),false);
if(!mesInsertado.equals(mesAnterior) && arreglo.size()!=0){
arreglo.get(arreglo.size()-1).setTipo(2);
arreglo.add(new ItemLista(3,mesAnterior));
arreglo.add(notificacion);
notifyItemRangeChanged(arreglo.size()-3,arreglo.size()-1);
recyclerView.scrollToPosition(arreglo.size()-1);
}else if(arreglo.size()!=0){
arreglo.get(arreglo.size()-1).setTipo(2);
arreglo.add(notificacion);
notifyItemRangeChanged(arreglo.size()-2,arreglo.size()-1);
recyclerView.scrollToPosition(arreglo.size()-1);
}else{
arreglo.add(notificacion);
notifyItemInserted(arreglo.size()-1);
recyclerView.scrollToPosition(arreglo.size()-1);
}
}但是上面的代码给了我下一个结果:

我认为这是由下面这句话引起的:
notifyItemRangeChanged(arreglo.size()-3,arreglo.size()-1);有谁知道怎么解决这个问题吗?提前谢谢。
发布于 2016-06-17 04:12:37
我这样解决了这个问题:
rv.setItemAnimator(new animadroNotificaciones(){
@Override
public void onAnimationFinished(RecyclerView.ViewHolder viewHolder) {
adaptador.notifyDataSetChanged();
}
});https://stackoverflow.com/questions/37663740
复制相似问题