Explorar el Código

适用于CardView的分割线

詹子聪 hace 5 años
padre
commit
4be83f2762

+ 1 - 1
app/src/main/java/com/itant/shibei/ui/home/coupon/TemplateFragment.java

@@ -15,8 +15,8 @@ import com.itant.shibei.base.ITopActionListener;
 import com.itant.shibei.tool.DataTool;
 import com.itant.shibei.ui.function.FunctionFragment;
 import com.itant.shibei.ui.mine.coupon.AddCouponActivity;
-import com.itant.shibei.widget.NormalDividerItemDecoration;
 import com.itant.shibei.widget.bottomlistener.OnRcvScrollListener;
+import com.itant.shibei.widget.decoration.NormalDividerItemDecoration;
 import com.miekir.common.utils.ToastTool;
 import com.miekir.mvp.presenter.InjectPresenter;
 import com.miekir.mvp.view.BaseMVPFragment;

+ 6 - 3
app/src/main/java/com/itant/shibei/ui/home/goods/GoodsFragment.java

@@ -3,6 +3,7 @@ package com.itant.shibei.ui.home.goods;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.os.Bundle;
+import android.util.TypedValue;
 
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AlertDialog;
@@ -14,8 +15,8 @@ import com.itant.shibei.R;
 import com.itant.shibei.base.ITopActionListener;
 import com.itant.shibei.tool.DataTool;
 import com.itant.shibei.ui.mine.goods.AddGoodsActivity;
-import com.itant.shibei.widget.DividerItemDecoration;
 import com.itant.shibei.widget.bottomlistener.OnRcvScrollListener;
+import com.itant.shibei.widget.decoration.SpacesItemDecoration;
 import com.miekir.common.utils.ToastTool;
 import com.miekir.mvp.presenter.InjectPresenter;
 import com.miekir.mvp.view.BaseMVPFragment;
@@ -64,8 +65,10 @@ public class GoodsFragment extends BaseMVPFragment implements IGoodsView, ITopAc
         LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
         rv_goods.setLayoutManager(layoutManager);
 
-        int dividerWidth = (int) getResources().getDimension(R.dimen.margin_s);
-        DividerItemDecoration decoration = new DividerItemDecoration(dividerWidth);
+        //int dividerWidth = (int) getResources().getDimension(R.dimen.margin_s);
+        //DividerItemDecoration decoration = new DividerItemDecoration(dividerWidth);
+        int dividerWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources().getDisplayMetrics());
+        SpacesItemDecoration decoration = new SpacesItemDecoration(dividerWidth);
         rv_goods.addItemDecoration(decoration);
         mAdapter = new GoodsAdapter(getActivity(), mGoodsList);
         mAdapter.setGoodsLongClickListener(this::showAdminDialog);

+ 2 - 2
app/src/main/java/com/itant/shibei/ui/home/search/SearchActivity.java

@@ -19,8 +19,8 @@ import com.itant.shibei.ui.home.goods.GoodsBean;
 import com.itant.shibei.ui.home.goods.GoodsPresenter;
 import com.itant.shibei.ui.home.goods.IGoodsView;
 import com.itant.shibei.ui.mine.goods.AddGoodsActivity;
-import com.itant.shibei.widget.DividerItemDecoration;
 import com.itant.shibei.widget.bottomlistener.OnRcvScrollListener;
+import com.itant.shibei.widget.decoration.CardViewDividerItemDecoration;
 import com.miekir.common.utils.ToastTool;
 import com.miekir.common.utils.ViewTool;
 import com.miekir.mvp.presenter.InjectPresenter;
@@ -75,7 +75,7 @@ public class SearchActivity extends BaseBeiActivity implements View.OnClickListe
         LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
         rv_search_result.setLayoutManager(layoutManager);
         int dividerWidth = (int) getResources().getDimension(R.dimen.margin_s);
-        DividerItemDecoration decoration = new DividerItemDecoration(dividerWidth);
+        CardViewDividerItemDecoration decoration = new CardViewDividerItemDecoration(dividerWidth);
         rv_search_result.addItemDecoration(decoration);
         mAdapter = new GoodsAdapter(this, mGoodsList);
         mAdapter.setGoodsLongClickListener(this::showAdminDialog);

+ 5 - 5
app/src/main/java/com/itant/shibei/widget/DividerItemDecoration.java

@@ -1,4 +1,4 @@
-package com.itant.shibei.widget;
+package com.itant.shibei.widget.decoration;
 
 import android.graphics.Rect;
 import android.view.View;
@@ -6,12 +6,12 @@ import android.view.View;
 import androidx.recyclerview.widget.RecyclerView;
 
 /**
- * 均等分割线
+ * 均等分割线(针对CardView)
  */
-public class DividerItemDecoration extends RecyclerView.ItemDecoration {
+public class CardViewDividerItemDecoration extends RecyclerView.ItemDecoration {
     private int halfSpace;
 
-    public DividerItemDecoration(int space) {
+    public CardViewDividerItemDecoration(int space) {
         this.halfSpace = space / 2;
     }
 
@@ -34,7 +34,7 @@ public class DividerItemDecoration extends RecyclerView.ItemDecoration {
 
         // 让分割线一致
         parent.setClipToPadding(false);
-        if (parent.getChildAdapterPosition(view) == parent.getAdapter().getItemCount() - 1) {
+        if (parent.getChildAdapterPosition(view) != parent.getAdapter().getItemCount() - 1) {
             parent.setPadding(halfSpace, halfSpace, halfSpace, 0);
         } else {
             parent.setPadding(halfSpace, halfSpace, halfSpace, halfSpace);

+ 1 - 1
app/src/main/java/com/itant/shibei/widget/NormalDividerItemDecoration.java

@@ -1,4 +1,4 @@
-package com.itant.shibei.widget;
+package com.itant.shibei.widget.decoration;
 
 import android.graphics.Rect;
 import android.view.View;

+ 38 - 0
app/src/main/java/com/itant/shibei/widget/decoration/SpacesItemDecoration.java

@@ -0,0 +1,38 @@
+package com.itant.shibei.widget.decoration;
+
+import android.graphics.Rect;
+import android.view.View;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * 第一个item顶部有分割线,其他item的顶部没有
+ */
+public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
+    private int space;
+
+    public SpacesItemDecoration(int space) {
+        this.space = space;
+    }
+
+    @Override
+    public void getItemOffsets(Rect outRect, View view,
+                               RecyclerView parent, RecyclerView.State state) {
+        outRect.left = space;
+        outRect.right = space;
+        outRect.bottom = 0;
+
+        // Add top margin only for the first item to avoid double space between items
+        if (parent.getChildLayoutPosition(view) == 0) {
+            outRect.top = space;
+        } else {
+            outRect.top = 0;
+        }
+
+        if (parent.getChildLayoutPosition(view) == parent.getAdapter().getItemCount() - 1) {
+            outRect.bottom = space;
+        } else {
+            outRect.bottom = 0;
+        }
+    }
+}