ImageAdapter.java 7.8 KB
package com.hjx.parent.adapter;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.google.gson.Gson;
import com.hjx.parent.ImageActivity;
import com.hjx.parent.ImageSelectActivity;
import com.hjx.parent.R;
import com.hjx.parent.databinding.ItemImageBinding;
import com.prws.common.bean.ImageBean;
import com.prws.common.utils.CommonUtil;

import java.util.List;

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageHolder> {
    private List<ImageBean> list;
    private ImageActivity context;

    public ImageAdapter(ImageActivity context, List<ImageBean> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public ImageHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        ItemImageBinding itemImageBinding = ItemImageBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
        return new ImageHolder(itemImageBinding);
    }

    @Override
    public void onBindViewHolder(@NonNull ImageHolder holder, int position) {
        ImageBean imageBean = list.get(position);
        Bitmap bitmap = BitmapFactory.decodeFile(imageBean.getPath());
        float imageHeight = bitmap.getHeight();
        float imageWidth = bitmap.getWidth();
        float viewHeight = CommonUtil.getScreenHeight(context) - CommonUtil.dpToPx(context, 250);
        float viewWidth = CommonUtil.getScreenWidth(context) - CommonUtil.dpToPx(context, 60);

        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(holder.binding.ivPic.getLayoutParams());
        if (imageHeight / imageWidth > viewHeight / viewWidth) {
            if (viewHeight > imageHeight) {
                layoutParams.height = (int) imageHeight;
                layoutParams.width = (int) imageWidth;
            } else {
                layoutParams.height = (int) viewHeight;
                layoutParams.width = (int) ((float) (imageWidth / imageHeight) * viewHeight);
            }
        } else {
            if (viewWidth > imageWidth) {
                layoutParams.height = (int) imageHeight;
                layoutParams.width = (int) imageWidth;
            } else {
                layoutParams.height = (int) ((float) (imageHeight / imageWidth) * viewWidth);
                layoutParams.width = (int) viewWidth;
            }
        }
        layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
        holder.binding.ivPic.setLayoutParams(layoutParams);
        holder.binding.ivPic.setImageBitmap(bitmap);


        RelativeLayout.LayoutParams layoutParams1 = new RelativeLayout.LayoutParams(holder.binding.rlPic.getLayoutParams());
        if (imageHeight / imageWidth > viewHeight / viewWidth) {
            if (viewHeight > imageHeight) {
                layoutParams1.height = (int) imageHeight;
                layoutParams1.width = (int) imageWidth;
            } else {
                layoutParams1.height = (int) viewHeight;
                layoutParams1.width = (int) ((float) (imageWidth / imageHeight) * viewHeight);
            }
        } else {
            if (viewWidth > imageWidth) {
                layoutParams1.height = (int) imageHeight;
                layoutParams1.width = (int) imageWidth;
            } else {
                layoutParams1.height = (int) ((float) (imageHeight / imageWidth) * viewWidth);
                layoutParams1.width = (int) viewWidth;
            }
        }
        Log.i("figLoaction", "height=" + layoutParams1.height + "   width=" + layoutParams1.width);
        layoutParams1.addRule(RelativeLayout.CENTER_IN_PARENT);
        holder.binding.rlPic.setLayoutParams(layoutParams1);
        if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
            holder.binding.rlPic.removeAllViews();
            for (int i = 0; i < imageBean.getCuts().size(); i++) {
                View view = LayoutInflater.from(context).inflate(R.layout.layout_select, null);
                Rect rect;
                if (imageBean.getCuts().get(i).getRect1() != null) {
                    rect = imageBean.getCuts().get(i).getRect1();
                } else {
                    rect = CommonUtil.getRect(imageBean.getCuts().get(i).getRect(), bitmap, layoutParams1.height, layoutParams1.width);
                    imageBean.getCuts().get(i).setRect1(rect);
                }
                Log.i("figLoaction", new Gson().toJson(rect));
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(rect.right - rect.left, rect.bottom - rect.top);
                params.setMargins(rect.left, rect.top, 0, 0);
                holder.binding.rlPic.addView(view, params);
                RelativeLayout rl_add = view.findViewById(R.id.rl_add);
                ImageView iv_state = view.findViewById(R.id.iv_state);
                ImageView iv_edit = view.findViewById(R.id.iv_edit);
                int finalI = i;
                if (imageBean.getCuts().get(i).isSelect()) {
                    rl_add.setBackgroundResource(R.drawable.bg_cut_select);
                    iv_state.setImageResource(R.mipmap.ic_selected);
                } else {
                    rl_add.setBackgroundResource(R.drawable.bg_cut_unselect);
                    iv_state.setImageResource(R.mipmap.ic_add);
                }
                rl_add.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Bitmap b = Bitmap.createBitmap(bitmap, v.getLeft() * bitmap.getWidth() / holder.binding.ivPic.getWidth(), v.getTop() * bitmap.getHeight() / holder.binding.ivPic.getHeight(), (v.getRight() - v.getLeft()) * bitmap.getWidth() / holder.binding.ivPic.getWidth(), (v.getBottom() - v.getTop()) * bitmap.getHeight() / holder.binding.ivPic.getHeight());
                        if (imageBean.getCuts().get(finalI).isSelect()) {
                            imageBean.getCuts().get(finalI).setSelect(false);
                            rl_add.setBackgroundResource(R.drawable.bg_cut_unselect);
                            iv_state.setImageResource(R.mipmap.ic_add);
                        } else {
                            imageBean.getCuts().get(finalI).setSelect(true);
                            imageBean.getCuts().get(finalI).setBitmap(b);
                            rl_add.setBackgroundResource(R.drawable.bg_cut_select);
                            iv_state.setImageResource(R.mipmap.ic_selected);
                        }
                        context.refreshNum();
                    }
                });
                iv_edit.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(context, ImageSelectActivity.class);
                        intent.putExtra("rect", rect);
                        intent.putExtra("path", imageBean.getPath());
                        intent.putExtra("position", finalI);
                        context.startActivityForResult(intent, 1001);
                    }
                });
            }
        } else {
            holder.binding.rlPic.removeAllViews();
        }
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    static class ImageHolder extends RecyclerView.ViewHolder {
        ItemImageBinding binding;

        public ImageHolder(@NonNull ItemImageBinding itemView) {
            super(itemView.getRoot());
            binding = itemView;
        }
    }
}