Sitelet https://github.com/DevAhamed/MultiViewAdapter/commit/91396aec9a0451d3219d4399d0525a85803a77e2
Skip to content
This repository was archived by the owner on Jan 2, 2021. It is now read-only.

Commit 91396ae

Browse files
authored
Implement onDrawOver method inside decorator (#80)
onDrawOver method inside the decorator behaves exactly similar to onDraw method. While onDraw is called before viewholder is drawn, onDrawOver is called after viewholder is drawn.
1 parent 79955e3 commit 91396ae

4 files changed

Lines changed: 55 additions & 0 deletions

File tree

‎multi-view-adapter/src/main/java/mva2/adapter/ItemBinder.java‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,13 @@ void drawItemDecoration(@NonNull Canvas canvas, @NonNull RecyclerView parent,
220220
}
221221
}
222222

223+
void drawItemDecorationOver(@NonNull Canvas canvas, @NonNull RecyclerView parent,
224+
@NonNull RecyclerView.State state, View child, int adapterPosition) {
225+
for (Decorator decorator : decorators) {
226+
decorator.onDrawOver(canvas, parent, state, child, adapterPosition);
227+
}
228+
}
229+
223230
void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent,
224231
@NonNull RecyclerView.State state, int adapterPosition) {
225232
for (Decorator decorator : decorators) {

‎multi-view-adapter/src/main/java/mva2/adapter/MultiViewAdapter.java‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,13 @@ public final void drawDecoration(@NonNull Canvas canvas, @NonNull RecyclerView p
405405
drawItemDecoration(canvas, parent, state, child, adapterPosition);
406406
}
407407

408+
@RestrictTo(RestrictTo.Scope.LIBRARY)
409+
public final void drawDecorationOver(@NonNull Canvas canvas, @NonNull RecyclerView parent,
410+
@NonNull RecyclerView.State state, View child, int adapterPosition) {
411+
drawSectionDecorationOver(canvas, parent, state, child, adapterPosition);
412+
drawItemDecorationOver(canvas, parent, state, child, adapterPosition);
413+
}
414+
408415
@RestrictTo(RestrictTo.Scope.LIBRARY)
409416
public final void getDecorationOffset(@NonNull Rect outRect, @NonNull View view,
410417
@NonNull RecyclerView parent, @NonNull RecyclerView.State state, int adapterPosition) {
@@ -545,12 +552,24 @@ private void drawItemDecoration(@NonNull Canvas canvas, @NonNull RecyclerView pa
545552
adapterPosition);
546553
}
547554

555+
private void drawItemDecorationOver(@NonNull Canvas canvas, @NonNull RecyclerView parent,
556+
@NonNull RecyclerView.State state, View child, int adapterPosition) {
557+
getItemBinder(adapterPosition).drawItemDecorationOver(canvas, parent, state, child,
558+
adapterPosition);
559+
}
560+
548561
private void drawSectionDecoration(@NonNull Canvas canvas, @NonNull RecyclerView parent,
549562
@NonNull RecyclerView.State state, View child, int adapterPosition) {
550563
nestedSection.drawChildSectionDecoration(adapterPosition, canvas, parent, state, child,
551564
adapterPosition);
552565
}
553566

567+
private void drawSectionDecorationOver(@NonNull Canvas canvas, @NonNull RecyclerView parent,
568+
@NonNull RecyclerView.State state, View child, int adapterPosition) {
569+
nestedSection.drawChildSectionDecorationOver(adapterPosition, canvas, parent, state, child,
570+
adapterPosition);
571+
}
572+
554573
private ItemBinder getItemBinder(int adapterPosition) {
555574
return itemBinders.get(getItemViewType(adapterPosition));
556575
}

‎multi-view-adapter/src/main/java/mva2/adapter/NestedSection.java‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,13 @@ public final void notifySectionRangeRemoved(Section section, int positionStart,
152152
drawChildSectionDecoration(itemPosition, canvas, parent, state, child, adapterPosition);
153153
}
154154

155+
@Override void drawDecorationOver(int itemPosition, @NonNull Canvas canvas,
156+
@NonNull RecyclerView parent, @NonNull RecyclerView.State state, View child,
157+
int adapterPosition) {
158+
super.drawDecorationOver(itemPosition, canvas, parent, state, child, adapterPosition);
159+
drawChildSectionDecorationOver(itemPosition, canvas, parent, state, child, adapterPosition);
160+
}
161+
155162
@Override void getDecorationOffsets(int itemPosition, @NonNull Rect outRect, @NonNull View view,
156163
@NonNull RecyclerView parent, @NonNull RecyclerView.State state, int adapterPosition) {
157164
super.getDecorationOffsets(itemPosition, outRect, view, parent, state, adapterPosition);
@@ -399,6 +406,19 @@ void drawChildSectionDecoration(int itemPosition, @NonNull Canvas canvas,
399406
}
400407
}
401408

409+
void drawChildSectionDecorationOver(int itemPosition, @NonNull Canvas canvas,
410+
@NonNull RecyclerView parent, @NonNull RecyclerView.State state, View child,
411+
int adapterPosition) {
412+
for (Section section : sections) {
413+
if (itemPosition >= section.getCount()) {
414+
itemPosition -= section.getCount();
415+
} else {
416+
section.drawDecorationOver(itemPosition, canvas, parent, state, child, adapterPosition);
417+
break;
418+
}
419+
}
420+
}
421+
402422
void getChildSectionOffsets(int itemPosition, @NonNull Rect outRect, @NonNull View view,
403423
@NonNull RecyclerView parent, @NonNull RecyclerView.State state, int adapterPosition) {
404424
for (Section section : sections) {

‎multi-view-adapter/src/main/java/mva2/adapter/Section.java‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,15 @@ void drawDecoration(int itemPosition, @NonNull Canvas canvas, @NonNull RecyclerV
313313
}
314314
}
315315

316+
void drawDecorationOver(int itemPosition, @NonNull Canvas canvas, @NonNull RecyclerView parent,
317+
@NonNull RecyclerView.State state, View child, int adapterPosition) {
318+
if (decorators.size() > 0) {
319+
for (Decorator decorator : decorators) {
320+
decorator.onDrawOver(canvas, parent, state, child, adapterPosition);
321+
}
322+
}
323+
}
324+
316325
void getDecorationOffsets(int itemPosition, @NonNull Rect outRect, @NonNull View view,
317326
@NonNull RecyclerView parent, @NonNull RecyclerView.State state, int adapterPosition) {
318327
if (decorators.size() > 0) {

0 commit comments

Comments
 (0)