Android: Z-индекс "RecyclerView.ItemDecoration"
У меня есть RecyclerView с 2 ItemDecorations. Как я могу указать высоту (z-index) каждого ItemDecoration, чтобы установить, какой из них будет нарисован поверх другого?
2 ответа
Из документации дляRecyclerView.addItemDecoration()
:
Предметы украшения заказаны. Декорации, размещенные ранее в списке, будут запускаться / запрашиваться / отрисовываться первыми для их влияния на представления элементов. Дополнение, добавленное к представлениям, будет вложенным; заполнение, добавленное более ранним оформлением, будет означать, что дальнейшим элементам оформления в списке будет предложено нарисовать / заполнить в пределах заданной области предыдущего оформления.
В общем, если вы напишите:
recycler.addItemDecoration(decoration1);
recycler.addItemDecoration(decoration2);
Чертеж будет:
decoration1.onDraw
decoration2.onDraw
- нормальный чертеж RecyclerView
decoration1.onDrawOver
decoration2.onDrawOver
Результатом этого является то, что ItemDecoration
добавленные позже будут рисовать поверх добавленных ранее. Z-индекс технически все тот же, но если decoration1
нарисовал все синим и decoration2
нарисовал то же самое в красном, вы увидите красное.
ItemDecorations просто соответствуют Z-индексу RecyclerView afaik. Это подразумевается в документации ItemDecoration.onDraw(...), поскольку он предоставляет ваш метод рисования с помощью холста RecyclerView:
void onDraw (Canvas c, родитель RecyclerView, состояние RecyclerView.State) Нарисуйте все соответствующие декорации в Canvas, предоставленном для RecyclerView. Любое содержимое, нарисованное этим методом, будет нарисовано до отображения представлений элементов и, таким образом, появится под представлениями.
Вероятно, это одна из причин того, что ItemDecoration.onDrawOver (...) также является методом.
Для дальнейшего разъяснения, на RecyclerView, он говорит вам, что он основан на индексе / вставке относительно того, когда они нарисованы
* Add an {@link ItemDecoration} to this RecyclerView. Item decorations can
* affect both measurement and drawing of individual item views.
*
* <p>Item decorations are ordered. Decorations placed earlier in the list will
* be run/queried/drawn first for their effects on item views. Padding added to views
* will be nested; a padding added by an earlier decoration will mean further
* item decorations in the list will be asked to draw/pad within the previous decoration's
* given area.</p>