Ich versuche, diese Animation zu tun:RecyclerView ItemAnimator animateAdd & animateChange beides gleichzeitig?
ein neues Objekt andere nach unten einfügen, wie es standardmäßig der Fall ist. aber der erste Gegenstand und der zweite Wechsel. das erste wird mit ViewType 1 eingefügt, dann das zweite, das den ViewType auf 2 setzt. Ich verwalte derzeit 3 Ansichtstypen (adaptadorNotificaciones.java).
1 voller Größe. notificacion_item1.xml
2 Polsterung. notificacion_item2.xml
3 Separator. section.xml
ich von DefaultItemAnimator wie folgt erweitern (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);
}}
ich es auch wie ein Stapel picturing bin:
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
llm.setReverseLayout(true);
llm.setStackFromEnd(true);
recyclerView.setLayoutManager(llm);
so, wenn ich ein Element hinzufügen, die Schriftrolle hat sich zu bewegen up:
recyclerView.scrollToPosition(arreglo.size()-1);
Der gesamte Code zum Einfügen eines Elements (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);
}
}
aber der obige Code gibt mir das nächste Ergebnis:
Ich denke, es durch die folgende Zeile verursacht:
notifyItemRangeChanged(arreglo.size()-3,arreglo.size()-1);
jemand eine Idee hat Wie behebt man das? Danke im Voraus.