Skip to content

Commit 1c1ea76

Browse files
committed
Fixed divider
Fixed swipeMenu
1 parent 08ac4ca commit 1c1ea76

File tree

16 files changed

+266
-83
lines changed

16 files changed

+266
-83
lines changed

.idea/codeStyles/Project.xml

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/com/omega_r/omegarecyclerview/swipe_menu_example/ContactsAdapter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@ public ViewHolder(ViewGroup parent) {
6060
bubbleChartButton = findViewById(R.id.imagebutton_bubble);
6161
bubbleChartButton.setOnClickListener(this);
6262

63-
contentView.setOnLongClickListener(new View.OnLongClickListener() {
63+
contentView.setOnClickListener(new View.OnClickListener() {
6464
@Override
65-
public boolean onLongClick(View v) {
66-
smoothOpenBeginMenu();
67-
return true;
65+
public void onClick(View v) {
66+
smoothOpenLeftMenu();
67+
// return true;
6868
}
6969
});
7070
}

omegarecyclerviewlibs/src/main/java/android/support/v7/widget/ExpandedRecyclerView.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,4 @@ public boolean isAttachedScrap() {
5252

5353
}
5454

55-
}
55+
}

omegarecyclerviewlibs/src/main/java/com/omega_r/libs/omegarecyclerview/OmegaRecyclerView.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ protected StickyHeaderDecoration provideStickyHeaderDecoration(@Nullable StickyH
259259
return new BaseStickyHeaderDecoration(adapter);
260260
}
261261

262+
262263
@Override
263264
public void addView(View view, int index, ViewGroup.LayoutParams params) {
264265
if (mFinishedInflate) {
@@ -400,6 +401,15 @@ public View transformTouchView(int touchPosition, View touchView) {
400401
return touchView;
401402
}
402403

404+
public void setDividerAlpha(float dividerAlpha) {
405+
for (int i = 0; i < getItemDecorationCount(); i++) {
406+
RecyclerView.ItemDecoration itemDecoration = getItemDecorationAt(i);
407+
if (itemDecoration instanceof DividerItemDecoration) {
408+
((DividerItemDecoration) itemDecoration).setDividerAlpha(dividerAlpha);
409+
}
410+
}
411+
}
412+
403413
public void setPaginationCallback(OnPageRequestListener callback) {
404414
RecyclerView.Adapter adapter = getAdapter();
405415
if (adapter instanceof HeaderFooterWrapperAdapter) {
@@ -539,7 +549,11 @@ public abstract static class Adapter<VH extends RecyclerView.ViewHolder> extends
539549

540550
private RecyclerView recyclerView;
541551

542-
public boolean isShowDivided(int position) {
552+
public boolean isDividerAllowedAbove(int position) {
553+
return true;
554+
}
555+
556+
public boolean isDividerAllowedBelow(int position) {
543557
return true;
544558
}
545559

omegarecyclerviewlibs/src/main/java/com/omega_r/libs/omegarecyclerview/header/HeaderFooterWrapperAdapter.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,24 @@ public int getItemCount() {
7070
}
7171

7272
@Override
73-
public boolean isShowDivided(int position) {
73+
public boolean isDividerAllowedAbove(int position) {
74+
SparseArray<View> sectionArray = null;
75+
if (isHeaderPosition(position)) sectionArray = mHeaderArray;
76+
if (isFooterPosition(position)) sectionArray = mFooterArray;
77+
78+
if (sectionArray != null) {
79+
return true;
80+
}
81+
82+
if (mRealAdapter instanceof OmegaRecyclerView.Adapter) {
83+
return ((OmegaRecyclerView.Adapter) mRealAdapter).isDividerAllowedAbove(position - mHeaderArray.size());
84+
}
85+
86+
return super.isDividerAllowedAbove(position);
87+
}
88+
89+
@Override
90+
public boolean isDividerAllowedBelow(int position) {
7491
SparseArray<View> sectionArray = null;
7592
if (isHeaderPosition(position)) sectionArray = mHeaderArray;
7693
if (isFooterPosition(position)) sectionArray = mFooterArray;
@@ -80,14 +97,14 @@ public boolean isShowDivided(int position) {
8097
if (tag instanceof Boolean) {
8198
return (boolean) tag;
8299
}
83-
return super.isShowDivided(position);
100+
return super.isDividerAllowedBelow(position);
84101
}
85102

86103
if (mRealAdapter instanceof OmegaRecyclerView.Adapter) {
87-
return ((OmegaRecyclerView.Adapter) mRealAdapter).isShowDivided(position - mHeaderArray.size());
104+
return ((OmegaRecyclerView.Adapter) mRealAdapter).isDividerAllowedBelow(position - mHeaderArray.size());
88105
}
89106

90-
return super.isShowDivided(position);
107+
return super.isDividerAllowedBelow(position);
91108
}
92109

93110
@Override

omegarecyclerviewlibs/src/main/java/com/omega_r/libs/omegarecyclerview/item_decoration/DividerItemDecoration.java

Lines changed: 67 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
import com.omega_r.libs.omegarecyclerview.item_decoration.decoration_helpers.DividerDecorationHelper;
1313

1414
public class DividerItemDecoration extends BaseItemDecoration {
15-
16-
private final Drawable mDivider;
1715
private final int mOffset;
18-
private final float mDividerAlpha;
16+
17+
private float mDividerAlpha;
18+
private Drawable mDivider;
1919
private int mDividerSize;
2020
private int mPaddingStart;
2121
private int mPaddingEnd;
@@ -49,6 +49,14 @@ public void setPaddingEnd(int padding) {
4949
mPaddingEnd = padding;
5050
}
5151

52+
public void setDividerAlpha(float dividerAlpha) {
53+
this.mDividerAlpha = dividerAlpha;
54+
}
55+
56+
public void setDividerDrawable(@NonNull Drawable dividerDrawable) {
57+
mDivider = dividerDrawable;
58+
}
59+
5260
private void updateSize() {
5361
if (mDividerSize < 0) {
5462
switch (getOrientation()) {
@@ -63,7 +71,7 @@ private void updateSize() {
6371
}
6472

6573
@Override
66-
void getItemOffset(@NonNull Rect outRect, @NonNull RecyclerView parent, @NonNull DividerDecorationHelper helper, int position, int itemCount) {
74+
public void getItemOffset(@NonNull Rect outRect, @NonNull RecyclerView parent, @NonNull DividerDecorationHelper helper, int position, int itemCount) {
6775
if (position == 0 && isShowBeginDivider()) {
6876
helper.setStart(outRect, mDividerSize);
6977
}
@@ -86,20 +94,35 @@ public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull
8694
final int childCount = parent.getChildCount();
8795

8896
if (childCount > 0) {
97+
c.save();
8998
DividerDecorationHelper helper = DividerDecorationHelper.getHelper(getOrientation(), parent);
90-
91-
mItemRect.set(parent.getPaddingLeft() + mPaddingStart,
92-
parent.getPaddingTop() + mPaddingStart,
93-
parent.getWidth() - parent.getPaddingRight() - mPaddingEnd,
94-
parent.getHeight() - parent.getPaddingBottom() - mPaddingEnd);
9599

100+
if (parent.getClipToPadding()) {
101+
mItemRect.set(parent.getPaddingLeft() + mPaddingStart,
102+
parent.getPaddingTop() + mPaddingStart,
103+
parent.getWidth() - parent.getPaddingRight() - mPaddingEnd,
104+
parent.getHeight() - parent.getPaddingBottom() - mPaddingEnd);
105+
106+
107+
helper.setStart(mItemRect, helper.getStart(mItemRect) - mPaddingStart);
108+
helper.setEnd(mItemRect, helper.getEnd(mItemRect) + mPaddingEnd);
109+
c.clipRect(mItemRect);
110+
111+
} else {
112+
mItemRect.set(mPaddingStart, mPaddingStart,
113+
parent.getWidth() - mPaddingEnd, parent.getHeight() - mPaddingEnd);
114+
}
96115
View child;
97116

117+
int offsetIndex = 0;
118+
98119
// show beginning divider
99120
if (isShowBeginDivider()) {
100121
child = parent.getChildAt(0);
101-
if (isShowDivider(parent, getAdapterPosition(parent, child))) {
102-
updateViewRect(child);
122+
int adapterPosition = getAdapterPosition(parent, child);
123+
if (adapterPosition == 0 && isShowDividerAbove(parent, 0)) {
124+
offsetIndex = 1;
125+
updateViewRect(parent, child);
103126
helper.setStart(mItemRect, helper.getStart(mViewRect) - helper.getOffset(mOffset));
104127
helper.setEnd(mItemRect, helper.getStart(mItemRect) - helper.getOffset(mDividerSize));
105128
drawDivider(c, child, mItemRect);
@@ -108,10 +131,10 @@ public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull
108131

109132
// show middle dividers
110133
if (isShowMiddleDivider()) {
111-
for (int i = 1; i < childCount; i++) {
134+
for (int i = offsetIndex; i < childCount; i++) {
112135
child = parent.getChildAt(i);
113-
if (isShowDivider(parent, getAdapterPosition(parent, child))) {
114-
updateViewRect(child);
136+
if (isShowDividerAbove(parent, getAdapterPosition(parent, child))) {
137+
updateViewRect(parent, child);
115138
helper.setStart(mItemRect, helper.getStart(mViewRect) - helper.getOffset(mOffset));
116139
helper.setEnd(mItemRect, helper.getStart(mItemRect) - helper.getOffset(mDividerSize));
117140
drawDivider(c, child, mItemRect);
@@ -122,17 +145,21 @@ public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull
122145
// show end divider
123146
if (isShowEndDivider()) {
124147
child = parent.getChildAt(childCount - 1);
125-
if (isShowDivider(parent, childCount - 1)) {
126-
updateViewRect(child);
148+
int adapterPosition = getAdapterPosition(parent, child);
149+
int adapterCount = parent.getAdapter().getItemCount();
150+
if (adapterPosition == adapterCount - 1 && isShowDividerBelow(parent, adapterPosition, adapterCount)) {
151+
updateViewRect(parent, child);
127152
helper.setStart(mItemRect, helper.getEnd(mViewRect) + helper.getOffset(mOffset));
128153
helper.setEnd(mItemRect, helper.getStart(mItemRect) + helper.getOffset(mDividerSize));
129154
drawDivider(c, child, mItemRect);
130155
}
131156
}
157+
158+
c.restore();
132159
}
133160
}
134161

135-
private void updateViewRect(View view) {
162+
private void updateViewRect(RecyclerView parent, View view) {
136163
view.getHitRect(mViewRect);
137164
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) view.getLayoutParams();
138165
mViewRect.left -= params.leftMargin;
@@ -149,10 +176,31 @@ private void drawDivider(Canvas canvas, View view, Rect rect) {
149176
divider.draw(canvas);
150177
}
151178

152-
private boolean isShowDivider(RecyclerView parent, int index) {
179+
private boolean isShowDividerBelow(RecyclerView parent, int adapterPosition, int count) {
180+
RecyclerView.Adapter adapter = parent.getAdapter();
181+
if (adapter instanceof OmegaRecyclerView.Adapter) {
182+
boolean allowedBelow = ((OmegaRecyclerView.Adapter) adapter).isDividerAllowedBelow(adapterPosition);
183+
if (allowedBelow) {
184+
return (adapterPosition + 1 == count)
185+
|| ((OmegaRecyclerView.Adapter) adapter).isDividerAllowedAbove(adapterPosition + 1);
186+
187+
} else {
188+
return false;
189+
}
190+
}
191+
return true;
192+
}
193+
194+
private boolean isShowDividerAbove(RecyclerView parent, int adapterPosition) {
153195
RecyclerView.Adapter adapter = parent.getAdapter();
154196
if (adapter instanceof OmegaRecyclerView.Adapter) {
155-
return ((OmegaRecyclerView.Adapter) adapter).isShowDivided(index);
197+
OmegaRecyclerView.Adapter omegaAdapter = (OmegaRecyclerView.Adapter) adapter;
198+
boolean allowedBelow = adapterPosition == 0 || omegaAdapter.isDividerAllowedBelow(adapterPosition - 1);
199+
if (allowedBelow) {
200+
return omegaAdapter.isDividerAllowedAbove(adapterPosition);
201+
} else {
202+
return false;
203+
}
156204
}
157205
return true;
158206
}

omegarecyclerviewlibs/src/main/java/com/omega_r/libs/omegarecyclerview/pagination/PaginationAdapter.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,22 @@ public long getItemId(int position) {
9393
return super.getItemId(position);
9494
}
9595

96+
@Override
97+
public boolean isDividerAllowedAbove(int position) {
98+
if (position == super.getItemCount()) {
99+
return position != 0;
100+
}
101+
return super.isDividerAllowedAbove(position);
102+
}
103+
104+
@Override
105+
public boolean isDividerAllowedBelow(int position) {
106+
if (position == super.getItemCount()) {
107+
return false;
108+
}
109+
return super.isDividerAllowedBelow(position);
110+
}
111+
96112
@Override
97113
public int getItemViewType(int position) {
98114
if (mShowPagination != null && position == super.getItemCount()) {

omegarecyclerviewlibs/src/main/java/com/omega_r/libs/omegarecyclerview/pagination/WrapperAdapter.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,22 @@ public void onAttachedToRecyclerView(RecyclerView recyclerView) {
100100
mChildAdapter.onAttachedToRecyclerView(recyclerView);
101101
}
102102

103+
@Override
104+
public boolean isDividerAllowedAbove(int position) {
105+
if (mChildAdapter instanceof OmegaRecyclerView.Adapter) {
106+
return ((OmegaRecyclerView.Adapter) mChildAdapter).isDividerAllowedAbove(position);
107+
}
108+
return super.isDividerAllowedBelow(position);
109+
}
110+
111+
@Override
112+
public boolean isDividerAllowedBelow(int position) {
113+
if (mChildAdapter instanceof OmegaRecyclerView.Adapter) {
114+
return ((OmegaRecyclerView.Adapter) mChildAdapter).isDividerAllowedBelow(position);
115+
}
116+
return super.isDividerAllowedBelow(position);
117+
}
118+
103119
@Override
104120
public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
105121
mChildAdapter.onDetachedFromRecyclerView(recyclerView);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.omega_r.libs.omegarecyclerview.swipe_menu;
2+
3+
/**
4+
* Created by Anton Knyazev on 03.03.2019.
5+
*/
6+
public enum SwipeDirection {
7+
8+
LEFT, RIGHT
9+
10+
}

0 commit comments

Comments
 (0)