Ho un RecyclerView che utilizza un LinearLayoutManager (verticale). Quello che sto cercando di ottenere è che il divisore della decorazione dell'oggetto (larghezza piena e 1px di altezza) si animi con la vista quando la vista viene spostata (la traduzioneY() la gestisce correttamente) e quando la vista cambia altezza. Nel codice corrente che ho qui sotto, il divisore salterà alla posizione futura del fondo della vista piuttosto che al fondo corrente durante l'animazione. C'è un modo in cui posso tenere conto delle variazioni di altezza nella decorazione degli oggetti durante l'animazione per rendere l'animazione un aspetto migliore?Come posso disegnare ItemDecoration correttamente quando l'elemento RecyclerView sta animando la sua altezza?
Sto modificando l'altezza della vista utilizzando notifyItemChanged() sull'adattatore per RecyclerView.
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
private Drawable mDivider;
public DividerItemDecoration(Context context) {
mDivider = context.getResources().getDrawable(R.drawable.line_divider);
}
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
int right = parent.getWidth();
int dividerHeight = mDivider.getIntrinsicHeight();
int childCount = parent.getChildCount();
for (int i = 0; i < childCount - 1; i++) {
View child = parent.getChildAt(i);
View nextChild = parent.getChildAt(i + 1);
RecyclerView.LayoutParams layoutParams1 =
(RecyclerView.LayoutParams) child.getLayoutParams();
RecyclerView.LayoutParams layoutParams2 =
(RecyclerView.LayoutParams) nextChild.getLayoutParams();
int left = 0;
if (layoutParams1 != null && layoutParams2 != null) {
left = Math.min(layoutParams1.leftMargin, layoutParams2.leftMargin);
}
int ty = (int) (child.getTranslationY() + 0.5f);
int top = child.getBottom() + ty;
int bottom = top + dividerHeight;
mDivider.setBounds(
left,
top,
right,
bottom);
mDivider.draw(c);
}
}
}
Questo è solo qualcosa che non è possibile nella decorazione elemento api? – DungFu
quindi ... le normali animazioni (aggiungi, rimuovi) animeranno correttamente la decorazione, ma quando cambierai l'altezza delle viste, salterà semplicemente? in tal caso, potresti fornire il codice modificando l'altezza delle viste? animate il cambio di altezza della vista? A proposito, la decorazione stessa sembra a posto. –
L'altezza viene modificata automaticamente dall'animatore predefinito di recyclerview (avendo una vista interna impostata su GONE) – DungFu