簡體   English   中英

Android:“ RecyclerView.ItemDecoration”的Z-index

[英]Android : Z-index of a “RecyclerView.ItemDecoration”

我有一個帶有2 ItemDecorations的RecyclerView。 如何指定每個ItemDecoration的高程(z-index),以設置將哪個繪制在另一個之上?

RecyclerView.addItemDecoration()文檔中

訂購物品裝飾。 列表中較早放置的裝飾將首先運行/查詢/繪制,因為它們會影響項目視圖。 添加到視圖的填充將被嵌套; 較早的裝飾添加的填充將意味着將要求列表中的其他物品裝飾在先前裝飾的給定區域內繪制/填充。

所以基本上,如果您寫:

recycler.addItemDecoration(decoration1);
recycler.addItemDecoration(decoration2);

圖紙將是:

  1. decoration1.onDraw
  2. decoration2.onDraw
  3. 正常的RecyclerView圖
  4. decoration1.onDrawOver
  5. decoration2.onDrawOver

這樣的結果是, ItemDecoration添加的ItemDecoration會借鑒之前添加的ItemDecoration Z索引在技術上仍然是相同的,但是如果decoration1繪制了所有藍色,而decoration2繪制了相同的紅色,您將看到紅色。

ItemDecorations僅與RecyclerView afaik的Z索引匹配。 這是由ItemDecoration.onDraw(...) 文檔所隱含的,因為它為RecyclerView的畫布提供了draw方法:

void onDraw(畫布c,RecyclerView父對象,RecyclerView.State狀態)將任何適當的裝飾繪制到提供給RecyclerView的Canvas中。 用這種方法繪制的任何內容都將在繪制項目視圖之前繪制,因此將出現在視圖下方。

這可能是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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM