①Android权限申请
②网络访问框架OKHttp
③内存溢出问题:图片压缩
④Android 系统7.0以上调用系统相机无效
⑤有关图片上传过程中遇到的内存溢出问题
①HTML
②Java代码
<基本功能>
实体类
适配器
1 /* 2 *Create By 小群子 2018/12/10 3 */ 4 5 public class LoadPicAdapter extends Recyclerview.Adapter<LoadPicAdapter.MyViewHolder> { 6 7 context context; 8 List<LoadFileVo> filelist = null; 9 View view; 10 int picNum = 8;//列表的图片个数最大值 11 12 public LoadPicAdapter(Context context, List<LoadFileVo> fileList) { 13 this.context = context; 14 this.fileList = fileList; 15 } 16 17 public LoadPicAdapter(Context context, List<LoadFileVo> fileList, int picNum) { 18 this.context = context; 19 this.fileList = fileList; 20 this.picNum = picNum; 21 } 22 23 public interface OnItemClickListener { 24 void click(View view, int positon); 25 26 void del(View view); 27 } 28 29 OnItemClickListener listener; 30 31 public void setListener(OnItemClickListener listener) { 32 this.listener = listener; 33 } 34 35 @Override 36 public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 37 38 view = LayoutInflater.from(context).inflate(R.layout.load_item_pic, parent, false); 39 return new MyViewHolder(view); 40 } 41 42 @Override 43 public void onBindViewHolder(MyViewHolder holder, final int position) { 44 45 //通过默认设置第一个为空文件为添加退保,且在文件个数小于最大限制值的情况。当图片个数等于最大限制值,第一个则不是添加按钮 46 if (position == 0&&fileList.get(position).getBitmap()==null) { 47 holder.ivPic.setImageResource(R.drawable.addpic);//加号图片 48 holder.ivPic.setOnClickListener(new View.OnClickListener() { 49 @Override 50 public void onClick(View view) { 51 listener.click(view, position); 52 } 53 }); 54 holder.ivDel.setVisibility(View.INVISIBLE); 55 holder.bg_progressbar.setVisibility(View.GONE); 56 57 } else { 58 // Uri uri = Uri.parse(fileList.get(position).getFile().getPath()); 59 // holder.ivPic.setImageURI(uri); 60 61 holder.ivPic.setImageBitmap(fileList.get(position).getBitmap()); 62 //使用压缩后的图片进行填充到界面上 63
64 65 66 holder.ivDel.setVisibility(View.VISIBLE); 67 holder.bg_progressbar.setVisibility(View.VISIBLE); 68 holder.bg_progressbar.setProgress(fileList.get(position).getPg()); 69 } 70 71 72 holder.ivDel.setOnClickListener(new View.OnClickListener() { 73 @Override 74 public void onClick(View view) { 75 //判断图片是否上传,上传后将无法删除 76 if (fileList.get(position).isUpload()) { 77 Toast.makeText(context, "该图片已上传!", Toast.LENGTH_SHORT).show(); 78 } else { 79 fileList.remove(position); 80 if (fileList.size()==picNum-1&&fileList.get(0).getBitmap()!=null){ 81 fileList.add(0,new LoadFileVo()); 82 }//如果数量达到最大数时,前面的加号去掉,然后再减去时,则添加前面的加号 83 notifyDataSetChanged(); 84 if (listener!=null){ 85 listener.del(view);//传递接口,计算图片个数显示在界面中 86 } 87 88 } 89 } 90 }); 91 92 93 } 94 95 @Override 96 public int getItemCount() { 97 return fileList.size(); 98 } 99 100 101 static class MyViewHolder extends RecyclerView.ViewHolder { 102 @BindView(R.id.ivPic) 103 ImageView ivPic; 104 @BindView(R.id.ivDel) 105 ImageView ivDel; 106 @BindView(R.id.bg_progressbar) 107 ProgressBar bg_progressbar; 108 109 View view; 110 111 112 MyViewHolder(View view) { 113 super(view); 114 this.view = view; 115 ButterKnife.bind(this, view); 116 } 117 } 118 }
item 布局//布局自行优化
《核心代码》
注:这里需要在Android中配置一个proveder 具体请参考 Android 系统7.0以上调用相机兼容问题
《获取返回的图片》
图片上传到后台OKhttp
- 海报