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 { private List list; private ImageActivity context; public ImageAdapter(ImageActivity context, List 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; 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); } }); } } } @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; } } }