123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- package com.fxy.adapter;
- import android.content.Context;
- import android.graphics.drawable.Drawable;
- import android.support.v4.content.ContextCompat;
- import android.support.v7.widget.RecyclerView;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- import com.bumptech.glide.Glide;
- import com.bumptech.glide.load.engine.DiskCacheStrategy;
- import com.bumptech.glide.request.RequestOptions;
- import com.luck.picture.lib.config.PictureConfig;
- import com.luck.picture.lib.config.PictureMimeType;
- import com.luck.picture.lib.entity.LocalMedia;
- import com.luck.picture.lib.tools.DateUtils;
- import com.luck.picture.lib.tools.StringUtils;
- import com.fxy.R;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * author:luck
- * project:PictureSelector
- * package:com.luck.pictureselector.adapter
- * email:893855882@qq.com
- * data:16/7/27
- */
- public class GridImageAdapter extends RecyclerView.Adapter<GridImageAdapter.ViewHolder> {
- public static final int TYPE_CAMERA = 1;
- public static final int TYPE_PICTURE = 2;
- private LayoutInflater mInflater;
- private List<LocalMedia> list = new ArrayList<>();
- //已上传
- private ArrayList<String> ossPhotoList =new ArrayList<>();
- private int selectMax = 9;
- private Context context;
- /**
- * 点击添加图片跳转
- */
- private onAddPicClickListener mOnAddPicClickListener;
- public interface onAddPicClickListener {
- void onAddPicClick();
- }
- public GridImageAdapter(Context context, onAddPicClickListener mOnAddPicClickListener) {
- this.context = context;
- mInflater = LayoutInflater.from(context);
- this.mOnAddPicClickListener = mOnAddPicClickListener;
- }
- public void setSelectMax(int selectMax) {
- this.selectMax = selectMax;
- }
- public void setList(List<LocalMedia> list) {
- this.list = list;
- }
- public class ViewHolder extends RecyclerView.ViewHolder {
- ImageView mImg;
- LinearLayout ll_del;
- TextView tv_duration;
- ViewHolder(View view) {
- super(view);
- mImg = view.findViewById(R.id.fiv);
- ll_del = view.findViewById(R.id.ll_del);
- tv_duration = view.findViewById(R.id.tv_duration);
- }
- }
- @Override
- public int getItemCount() {
- if (list.size() < selectMax) {
- return list.size() + 1;
- } else {
- return list.size();
- }
- }
- @Override
- public int getItemViewType(int position) {
- if (isShowAddItem(position)) {
- return TYPE_CAMERA;
- } else {
- return TYPE_PICTURE;
- }
- }
- /**
- * 创建ViewHolder
- */
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
- View view = mInflater.inflate(R.layout.item_filter_image, viewGroup, false);
- return new ViewHolder(view);
- }
- private boolean isShowAddItem(int position) {
- int size = list.size();
- return position == size;
- }
- /**
- * 设置值
- */
- @Override
- public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
- //少于8张,显示继续添加的图标
- if (getItemViewType(position) == TYPE_CAMERA) {
- viewHolder.mImg.setImageResource(R.drawable.ic_add_img);
- viewHolder.mImg.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- mOnAddPicClickListener.onAddPicClick();
- }
- });
- viewHolder.ll_del.setVisibility(View.INVISIBLE);
- } else {
- viewHolder.ll_del.setVisibility(View.VISIBLE);
- viewHolder.ll_del.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- int index = viewHolder.getAdapterPosition();
- // 这里有时会返回-1造成数据下标越界,具体可参考getAdapterPosition()源码,
- // 通过源码分析应该是bindViewHolder()暂未绘制完成导致,知道原因的也可联系我~感谢
- if (index != RecyclerView.NO_POSITION) {
- list.remove(index);
- ossPhotoList.remove(index);//删除oss
- notifyItemRemoved(index);
- notifyItemRangeChanged(index, list.size());
- Log.i("delete position:", index + "--->remove after:" + list.size());
- }
- }
- });
- LocalMedia media = list.get(position);
- int mimeType = media.getMimeType();
- String path;
- if (media.isCut() && !media.isCompressed()) {
- // 裁剪过
- path = media.getCutPath();
- } else if (media.isCompressed() || (media.isCut() && media.isCompressed())) {
- // 压缩过,或者裁剪同时压缩过,以最终压缩过图片为准
- path = media.getCompressPath();
- } else {
- // 原图
- path = media.getPath();
- }
- // 图片
- if (media.isCompressed()) {
- Log.i("compress image result:", new File(media.getCompressPath()).length() / 1024 + "k");
- Log.i("压缩地址::", media.getCompressPath());
- }
- Log.i("原图地址::", media.getPath());
- int pictureType = PictureMimeType.isPictureType(media.getPictureType());
- if (media.isCut()) {
- Log.i("裁剪地址::", media.getCutPath());
- }
- long duration = media.getDuration();
- viewHolder.tv_duration.setVisibility(pictureType == PictureConfig.TYPE_VIDEO
- ? View.VISIBLE : View.GONE);
- if (mimeType == PictureMimeType.ofAudio()) {
- viewHolder.tv_duration.setVisibility(View.VISIBLE);
- Drawable drawable = ContextCompat.getDrawable(context, R.drawable.picture_audio);
- StringUtils.modifyTextViewDrawable(viewHolder.tv_duration, drawable, 0);
- } else {
- Drawable drawable = ContextCompat.getDrawable(context, R.drawable.video_icon);
- StringUtils.modifyTextViewDrawable(viewHolder.tv_duration, drawable, 0);
- }
- viewHolder.tv_duration.setText(DateUtils.timeParse(duration));
- if (mimeType == PictureMimeType.ofAudio()) {
- viewHolder.mImg.setImageResource(R.drawable.audio_placeholder);
- } else {
- RequestOptions options = new RequestOptions()
- .centerCrop()
- .placeholder(R.color.color_f6)
- .diskCacheStrategy(DiskCacheStrategy.ALL);
- Glide.with(viewHolder.itemView.getContext())
- .load(path)
- .apply(options)
- .into(viewHolder.mImg);
- }
- //itemView 的点击事件
- if (mItemClickListener != null) {
- viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- int adapterPosition = viewHolder.getAdapterPosition();
- mItemClickListener.onItemClick(adapterPosition, v);
- }
- });
- }
- }
- }
- private OnItemClickListener mItemClickListener;
- public interface OnItemClickListener {
- void onItemClick(int position, View v);
- }
- public void setOnItemClickListener(OnItemClickListener listener) {
- this.mItemClickListener = listener;
- }
- public void setPhotoPath(String photoPath) {
- ossPhotoList.add(photoPath);
- }
- public ArrayList getPhotoList(){
- return ossPhotoList;
- }
- }
|