Bladeren bron

图片界面

詹子聪 5 jaren geleden
bovenliggende
commit
5d28c854d1

+ 1 - 1
app/src/main/java/com/itant/shibei/base/ApiService.java

@@ -75,7 +75,7 @@ public interface ApiService {
 
     /**分页查询优惠券*/
     @GET("/eden/api/getCouponList")
-    Observable<BaseResponse<List<CouponBean>>> getCouponList(@Query("pageNum") int pageNum, @Query("pageSize") int pageSize);
+    Observable<BaseResponse<List<String>>> getCouponList(@Query("pageNum") int pageNum, @Query("pageSize") int pageSize);
 
     /*----------------------------------------JSON开始----------------------------------------*/
     /**保存和更新JSON*/

+ 80 - 72
app/src/main/java/com/itant/shibei/ui/home/coupon/TemplateAdapter.java

@@ -1,10 +1,10 @@
 package com.itant.shibei.ui.home.coupon;
 
-import android.app.Activity;
 import android.content.Context;
+import android.content.Intent;
 import android.graphics.drawable.Drawable;
 import android.text.TextUtils;
-import android.view.View;
+import android.view.ViewGroup;
 import android.widget.ImageView;
 
 import androidx.annotation.NonNull;
@@ -15,10 +15,13 @@ import com.bumptech.glide.request.target.SimpleTarget;
 import com.bumptech.glide.request.transition.Transition;
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.BaseViewHolder;
+import com.itant.shibei.BuildConfig;
 import com.itant.shibei.R;
 import com.itant.shibei.base.ItemLongClickListener;
 import com.itant.shibei.manager.UserInfoManager;
-import com.miekir.common.utils.ActivityTool;
+import com.itant.shibei.ui.TabActivity;
+import com.itant.shibei.ui.home.goods.detail.MeizhiDetailActivity;
+import com.miekir.common.utils.SizeTool;
 import com.miekir.common.utils.ToastTool;
 
 import java.util.List;
@@ -29,93 +32,98 @@ import java.util.List;
  * @date 2020/7/6 20:08
  * Description: 首页商品适配器
  */
-public class TemplateAdapter extends BaseQuickAdapter<CouponBean, BaseViewHolder> {
+public class TemplateAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
     private int mRadius = 8;
     private Context mContext;
 
-    public TemplateAdapter(Context context, @Nullable List<CouponBean> data) {
+    private int screenWidth;
+    private int mDividerWidth;
+    private int defaultSize;
+
+    public TemplateAdapter(Context context, @Nullable List<String> data, int dividerWidth) {
         super(R.layout.item_template, data);
         mRadius = (int) context.getResources().getDimension(R.dimen.margin_s);
         mContext = context;
+        this.screenWidth = SizeTool.SCREEN_WIDTH;
+        this.mDividerWidth = dividerWidth;
+        this.defaultSize =  (screenWidth - dividerWidth * TemplateFragment.SPACE_LINES) / TemplateFragment.SPAN_COUNT;
     }
 
     @Override
-    protected void convert(@NonNull BaseViewHolder holder, CouponBean couponBean) {
+    protected void convert(@NonNull BaseViewHolder holder, String url) {
         ImageView iv_template = holder.getView(R.id.iv_template);
         // 解决图片错乱
-        iv_template.setTag(R.id.aciv_goods, couponBean.coverUrl);
-        if (couponBean.isCoverUrlLocal) {
-            int resourceId = Integer.parseInt(couponBean.coverUrl);
-            iv_template.setScaleType(ImageView.ScaleType.CENTER_CROP);
-            iv_template.setImageResource(resourceId);
-            //Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), resourceId);
-            // 圆角
-            //RoundedBitmapDrawable roundDrawable = RoundedBitmapDrawableFactory.create(mContext.getResources(), bitmap);
-            //roundDrawable.setCornerRadius(48);
-            //iv_template.setImageDrawable(roundDrawable);
-            // 这些处理都是把drawable圆角了,如果drawable本身尺寸比较小,就起不到圆角效果
-        } else {
-            // 圆角
-            Glide.with(mContext).load(couponBean.coverUrl)
-                    //.transform(new CenterCrop(), new RoundedCorners(48))
-                    //.apply(RequestOptions.bitmapTransform(new RoundedCorners(mRadius)))
-                    //.apply(new RequestOptions()
-                    //        .skipMemoryCache(true)
-                    //        .diskCacheStrategy(DiskCacheStrategy.NONE))
-                    //.centerCrop() 千万不要加,加了就没有圆角效果了
-                    //先加载原图大小的十分之一
-                    .thumbnail(0.1f)
-                    .into(new SimpleTarget<Drawable>() {
-                        @Override
-                        public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) {
-                            //iv_template.setScaleType(ImageView.ScaleType.CENTER_CROP);
-                            //iv_template.setImageDrawable(resource);
-                            if (resource == null) {
-                                iv_template.setImageResource(R.mipmap.logo_gray);
-                                return;
-                            }
-
-                            String coverUrl = null;
-                            try {
-                                coverUrl = (String) iv_template.getTag(R.id.aciv_goods);
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                            }
-                            if (TextUtils.isEmpty(coverUrl) || !TextUtils.equals(coverUrl, couponBean.coverUrl)) {
-                                iv_template.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
-                                iv_template.setImageResource(R.mipmap.logo_gray);
-                            } else {
-                                iv_template.setScaleType(ImageView.ScaleType.CENTER_CROP);
-                                iv_template.setImageDrawable(resource);
-                            }
+        iv_template.setTag(R.id.aciv_goods, url);
+
+        String realUrl = url.startsWith("http") ? url : BuildConfig.BASE_URL+url;
+
+        // 设置默认图片
+        setDefaultView(iv_template);
+
+        Glide.with(mContext).load(realUrl)
+                //.transform(new CenterCrop(), new RoundedCorners(48))
+                //.apply(RequestOptions.bitmapTransform(new RoundedCorners(mRadius)))
+                //.apply(new RequestOptions()
+                //        .skipMemoryCache(true)
+                //        .diskCacheStrategy(DiskCacheStrategy.NONE))
+                //.centerCrop() 千万不要加,加了就没有圆角效果了
+                //先加载原图大小的十分之一
+                .thumbnail(0.1f)
+                .into(new SimpleTarget<Drawable>() {
+                    @Override
+                    public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) {
+                        //iv_template.setScaleType(ImageView.ScaleType.CENTER_CROP);
+                        //iv_template.setImageDrawable(resource);
+                        if (resource == null) {
+                            iv_template.setImageResource(R.mipmap.logo_gray);
+                            return;
                         }
-                    });
-        }
 
+                        String coverUrl = null;
+                        try {
+                            coverUrl = (String) iv_template.getTag(R.id.aciv_goods);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        if (TextUtils.isEmpty(coverUrl) || !TextUtils.equals(coverUrl, url)) {
+                            setDefaultView(iv_template);
+                        } else {
+                            int imageWidth = resource.getIntrinsicWidth();
+                            int imageHeight = resource.getIntrinsicHeight();
+                            // 减去间距
+                            int height = (screenWidth - mDividerWidth * TemplateFragment.SPACE_LINES) / TemplateFragment.SPAN_COUNT * imageHeight / imageWidth;
+                            ViewGroup.LayoutParams para = iv_template.getLayoutParams();
+                            para.height = height;
+                            para.width = (screenWidth - mDividerWidth * TemplateFragment.SPACE_LINES) / TemplateFragment.SPAN_COUNT;
+                            iv_template.setScaleType(ImageView.ScaleType.FIT_XY);
+                            iv_template.setImageDrawable(resource);
+                        }
 
-        holder.setText(R.id.tv_template, couponBean.couponName);
-        holder.setOnClickListener(R.id.rl_template, new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                if (!couponBean.actionEnable) {
-                    ToastTool.showShort("敬请期待");
-                    return;
-                }
+                    }
+                });
 
-                ActivityTool.openUrl((Activity) mContext, couponBean.jumpUrl);
+        iv_template.setOnClickListener(v -> {
+            if (!UserInfoManager.getInstance().getBeiUser().isVip) {
+                ToastTool.showShort("请先激活会员");
+                if (mContext instanceof TabActivity) {
+                    ((TabActivity) mContext).setCurrentPage(2);
+                }
+                return;
             }
+
+            // 跳转查看大图界面
+            Intent photoIntent = new Intent(mContext, MeizhiDetailActivity.class);
+            photoIntent.putExtra(MeizhiDetailActivity.TAG_URL, realUrl);
+            mContext.startActivity(photoIntent);
         });
+    }
 
-        if (UserInfoManager.getInstance().isLogin() &&
-                TextUtils.equals("[email protected]", UserInfoManager.getInstance().getBeiUser().email)) {
-            View view = holder.getView(R.id.rl_template);
-            view.setOnLongClickListener(v -> {
-                if (couponLongClickListener != null) {
-                    couponLongClickListener.onItemLongClick(holder.getLayoutPosition());
-                }
-                return false;
-            });
-        }
+    private void setDefaultView(ImageView iv_template) {
+        ViewGroup.LayoutParams para = iv_template.getLayoutParams();
+        para.height = defaultSize;
+        para.width = defaultSize;
+        iv_template.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+        iv_template.setImageResource(R.mipmap.logo_gray);
     }
 
     private ItemLongClickListener couponLongClickListener;

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

@@ -1,19 +1,16 @@
 package com.itant.shibei.ui.home.coupon;
 
-import android.content.DialogInterface;
-import android.content.Intent;
+import android.util.TypedValue;
 
-import androidx.appcompat.app.AlertDialog;
-import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.StaggeredGridLayoutManager;
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 
 import com.itant.shibei.R;
 import com.itant.shibei.base.ITopActionListener;
 import com.itant.shibei.ui.function.FunctionFragment;
-import com.itant.shibei.ui.mine.coupon.AddPhotoActivity;
 import com.itant.shibei.widget.bottomlistener.OnRcvScrollListener;
-import com.itant.shibei.widget.decoration.NormalDividerItemDecoration;
+import com.itant.shibei.widget.decoration.DividerItemDecoration;
 import com.miekir.common.utils.ToastTool;
 import com.miekir.mvp.presenter.InjectPresenter;
 import com.miekir.mvp.view.BaseMVPFragment;
@@ -21,30 +18,36 @@ import com.miekir.mvp.view.BaseMVPFragment;
 import java.util.ArrayList;
 import java.util.List;
 
-import rx_activity_result2.RxActivityResult;
-
-import static android.app.Activity.RESULT_OK;
-
 /**
  * 模板Fragment
  */
-public class TemplateFragment extends BaseMVPFragment implements ITemplateView<CouponBean>, ITopActionListener {
+public class TemplateFragment extends BaseMVPFragment implements ITemplateView<String>, ITopActionListener {
     private static final int PAGE_START = 0;
     private static final int PAGE_SIZE = 20;
-    
+
+    public static final int SPAN_COUNT = 2;                // 列数
+    public static final int SPACE_LINES = SPAN_COUNT + 1;  // 空隙列数
+    public static final int SPACE_WIDTH_DP = 3;            // 空隙宽度
+
     private int mTemplateType = FunctionFragment.TEMPLATE_TYPE_BONUS;
 
     @InjectPresenter
     TemplatePresenter mPresenter;
-    
+
     private SwipeRefreshLayout srl_template;
-    private List<CouponBean> mCouponBeanList = new ArrayList<>();
+    private List<String> mCouponBeanList = new ArrayList<>();
     private TemplateAdapter mAdapter;
     private RecyclerView rv_template;
+    private StaggeredGridLayoutManager mLayoutManager;
+    private int dividerWidth;
 
-    /**当前页*/
+    /**
+     * 当前页
+     */
     private int mCurrentPage = PAGE_START;
-    /**是否下拉获取数据*/
+    /**
+     * 是否下拉获取数据
+     */
     private boolean mIsRefresh = true;
 
     public TemplateFragment(int templateType) {
@@ -58,16 +61,18 @@ public class TemplateFragment extends BaseMVPFragment implements ITemplateView<C
 
     @Override
     protected void onViewInit() {
+        dividerWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, SPACE_WIDTH_DP, getResources().getDisplayMetrics());
+
         rv_template = rootView.findViewById(R.id.rv_template);
-        // 必须要设置LayoutManager,否则RecyclerView不知道要使用什么布局,从而在界面上不显示
-        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
-        rv_template.setLayoutManager(layoutManager);
+        // 瀑布流。必须要设置LayoutManager,否则RecyclerView不知道要使用什么布局,从而在界面上不显示
+        mLayoutManager = new StaggeredGridLayoutManager(SPAN_COUNT, StaggeredGridLayoutManager.VERTICAL);
+        rv_template.setLayoutManager(mLayoutManager);
 
-        int dividerWidth = (int) getResources().getDimension(R.dimen.margin_s);
-        NormalDividerItemDecoration decoration = new NormalDividerItemDecoration(dividerWidth);
+        // 分割线
+        DividerItemDecoration decoration = new DividerItemDecoration(dividerWidth);
         rv_template.addItemDecoration(decoration);
-        mAdapter = new TemplateAdapter(getActivity(), mCouponBeanList);
-        //mAdapter.setCouponLongClickListener(this::showAdminDialog);
+
+        mAdapter = new TemplateAdapter(getActivity(), mCouponBeanList, dividerWidth);
         rv_template.setAdapter(mAdapter);
         // 必须先绑定RecyclerView
         mAdapter.setEmptyView(R.layout.view_empty, rv_template);
@@ -82,17 +87,14 @@ public class TemplateFragment extends BaseMVPFragment implements ITemplateView<C
                 R.color.red_droid);
 
         // 下拉刷新
-        srl_template.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
-            @Override
-            public void onRefresh() {
-                mIsRefresh = true;
-                mCurrentPage = PAGE_START;
-                mPresenter.getTemplateData(mCurrentPage, PAGE_SIZE);
-            }
+        srl_template.setOnRefreshListener(() -> {
+            mIsRefresh = true;
+            mCurrentPage = PAGE_START;
+            mPresenter.getTemplateData(mCurrentPage, PAGE_SIZE);
         });
 
         // 加载更多
-        rv_template.addOnScrollListener(new OnRcvScrollListener(){
+        rv_template.addOnScrollListener(new OnRcvScrollListener() {
             @Override
             public void onBottom() {
                 super.onBottom();
@@ -113,65 +115,9 @@ public class TemplateFragment extends BaseMVPFragment implements ITemplateView<C
         mPresenter.getTemplateData(mCurrentPage, PAGE_SIZE);
     }
 
-    /**
-     * 修改商品或者删除商品
-     */
-    private void showAdminDialog(int position) {
-        CouponBean couponBean = mCouponBeanList.get(position);
-        if (couponBean.isLocal) {
-            // 本地写死的不能删除
-            return;
-        }
-        AlertDialog alertDialog = new AlertDialog.Builder(getActivity())
-                .setMessage("选择操作")
-                .setPositiveButton("修改", (dialog, which) -> {
-                    dialog.dismiss();
-                    Intent modifyIntent = new Intent(getActivity(), AddPhotoActivity.class);
-                    modifyIntent.putExtra(AddPhotoActivity.KEY_MODIFY_COUPON, couponBean);
-                    RxActivityResult.on(getActivity())
-                            .startIntent(modifyIntent)
-                            .filter(result -> result.resultCode() == RESULT_OK)
-                            .doOnNext(result -> {
-                                // 修改商品成功之后刷新item
-                                CouponBean modifiedBean = (CouponBean) result.data().getSerializableExtra(AddPhotoActivity.KEY_MODIFY_COUPON);
-                                if (modifiedBean == null) {
-                                    return;
-                                }
-                                couponBean.updateData(modifiedBean);
-                                mAdapter.notifyItemChanged(position);
-                            })
-                            .subscribe();
-                })
-                .setNeutralButton("取消", (dialog, which) -> {
-                    dialog.dismiss();
-                })
-                .setNegativeButton("删除", (DialogInterface dialog, int which) -> {
-                    dialog.dismiss();
-                    showDeleteDialog(position);
-                }).create();
-        alertDialog.setCanceledOnTouchOutside(false);
-        alertDialog.setCancelable(false);
-        alertDialog.show();
-    }
-
-    /**
-     * 是否删除商品
-     */
-    private void showDeleteDialog(int position) {
-        CouponBean couponBean = mCouponBeanList.get(position);
-        AlertDialog alertDialog = new AlertDialog.Builder(getActivity())
-                .setMessage("确定删除优惠券:" + couponBean.couponName)
-                .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
-                .setPositiveButton("确定", (DialogInterface dialog, int which) -> {
-                    dialog.dismiss();
-                    // 删除商品
-                    mPresenter.deleteCouponById(position, couponBean.id);
-                }).create();
-        alertDialog.show();
-    }
 
     @Override
-    public void onTemplateDataCome(boolean success, String message, List<CouponBean> couponBeanList) {
+    public void onTemplateDataCome(boolean success, String message, List<String> couponBeanList) {
         srl_template.setRefreshing(false);
         if (!success) {
             ToastTool.showShort(message);
@@ -203,6 +149,7 @@ public class TemplateFragment extends BaseMVPFragment implements ITemplateView<C
 
     /**
      * 删除商品结果
+     *
      * @param success
      * @param message
      * @param position

+ 3 - 3
app/src/main/java/com/itant/shibei/ui/home/coupon/TemplatePresenter.java

@@ -19,7 +19,7 @@ import io.reactivex.schedulers.Schedulers;
  * @date 2020/7/8 19:43
  * Description: 模板的Presenter
  */
-public class TemplatePresenter extends BasePresenter<ITemplateView<CouponBean>> {
+public class TemplatePresenter extends BasePresenter<ITemplateView<String>> {
 
 
     public void getTemplateData(int pageNum, int pageSize) {
@@ -28,9 +28,9 @@ public class TemplatePresenter extends BasePresenter<ITemplateView<CouponBean>>
                 .getCouponList(pageNum, pageSize)
                 .subscribeOn(Schedulers.io())
                 .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(new BaseObserver<List<CouponBean>>() {
+                .subscribe(new BaseObserver<List<String>>() {
                     @Override
-                    public void onSuccess(List<CouponBean> result) {
+                    public void onSuccess(List<String> result) {
                         if (getView() != null) {
                             getView().onTemplateDataCome(true, "", result);
                         }

+ 31 - 0
app/src/main/java/com/itant/shibei/widget/decoration/DividerItemDecoration.java

@@ -0,0 +1,31 @@
+package com.itant.shibei.widget.decoration;
+
+import android.graphics.Rect;
+import android.view.View;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * 均等分割线
+ */
+public class DividerItemDecoration extends RecyclerView.ItemDecoration {
+    private int halfSpace;
+
+    public DividerItemDecoration(int space) {
+        this.halfSpace = space;
+    }
+
+    @Override
+    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+
+        if (parent.getPaddingLeft() != halfSpace) {
+            parent.setPadding(halfSpace, halfSpace, halfSpace, halfSpace);
+            parent.setClipToPadding(false);
+        }
+
+        outRect.top = halfSpace;
+        outRect.bottom = halfSpace;
+        outRect.left = halfSpace;
+        outRect.right = halfSpace;
+    }
+}

+ 4 - 54
app/src/main/res/layout/item_template.xml

@@ -1,57 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/iv_template"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical">
-
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/width_stroke"
-        android:background="@color/green_divider" />
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="horizontal">
-        <View
-            android:layout_width="@dimen/width_stroke"
-            android:layout_height="match_parent"
-            android:background="@color/green_divider" />
-        <FrameLayout
-            android:id="@+id/rl_template"
-            android:layout_width="0dp"
-            android:layout_weight="1"
-            android:layout_height="wrap_content"
-            android:background="@color/white"
-            android:foreground="@drawable/selectable_item_background">
-            <ImageView
-                android:id="@+id/iv_template"
-                android:layout_width="match_parent"
-                android:layout_height="@dimen/height_cover"
-                android:src="@mipmap/logo_gray" />
-            <TextView
-                android:id="@+id/tv_template"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_margin="0.4dp"
-                android:paddingStart="@dimen/margin_s"
-                android:paddingEnd="@dimen/margin_s"
-                android:paddingTop="@dimen/margin_ss"
-                android:paddingBottom="@dimen/margin_ss"
-                android:layout_gravity="bottom"
-                android:textColor="@color/white"
-                android:textSize="@dimen/text_normal"
-                android:background="@color/black_light_transparent"/>
-        </FrameLayout>
-        <View
-            android:layout_width="@dimen/width_stroke"
-            android:layout_height="match_parent"
-            android:background="@color/green_divider" />
-    </LinearLayout>
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/width_stroke"
-        android:background="@color/green_divider" />
-
-
-</LinearLayout>
+    android:layout_height="@dimen/height_cover"
+    android:src="@mipmap/logo_gray" />