ビルドインDividerItemDecoration
クラスを使用してやりたいする方法はありません。
分周器は2段階の手順で描画されます。まずgetItemOffsets()
を使用して、RecyclerView
の各項目の下部にスペースを追加します。次に、onDraw()
を使用して、そのスペース内に仕切線を描画します。
ソースコードを見て:あなたはそのスペースを見ることができます
ここ
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
RecyclerView.State state) {
...
if (mOrientation == VERTICAL) {
outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
} else {
outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
}
}
は、各項目の(水平モードで、または右)下にのみ追加されます。最初の項目には特別な場合もありません。ここで
private void drawVertical(Canvas canvas, RecyclerView parent) {
...
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
parent.getDecoratedBoundsWithMargins(child, mBounds);
final int bottom = mBounds.bottom + Math.round(child.getTranslationY());
final int top = bottom - mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
}
...
}
あなたはmDivider
描画可能な垂直境界が各子ビューの下端に基づいて計算されていることがわかります。
もちろん、RecyclerView.ItemDecoration
の独自の実装を作成し、リストの最初の項目の特殊ケースを作成することもできます。
編集:ここDividerItemDecoration
に基づいて削ぎ落としたと簡略化ItemDecoration
だだけでなく、最初の項目の上に仕切りを描く:https://gist.github.com/zizibaloob/0c6be3e1318257950507e9c614c8aa70