Android 选择图片、上传图片之ImagePicker

举报
yechaoa 发表于 2022/05/30 22:14:34 2022/05/30
【摘要】 效果图: 后来又出了两篇,也可以看一下 Android 选择图片、上传图片之PictureSelector Android 选择图片、上传图片之Matisse 添加依赖: 选择图片:compile 'com.lzy.widget:imagepicker:0.5.4' github地址:https://github.com/...

效果图:




后来又出了两篇,也可以看一下

Android 选择图片、上传图片之PictureSelector

Android 选择图片、上传图片之Matisse


添加依赖:

选择图片:compile 'com.lzy.widget:imagepicker:0.5.4'

github地址:https://github.com/jeasonlzy/ImagePicker

上传文件:compile 'com.zhy:okhttputils:2.6.2'

github地址:https://github.com/hongyangAndroid/okhttputils

MainActivity.java


      package com.yechaoa.uploadimage;
      import android.content.Intent;
      import android.support.v7.app.AppCompatActivity;
      import android.os.Bundle;
      import android.support.v7.widget.GridLayoutManager;
      import android.support.v7.widget.RecyclerView;
      import android.view.View;
      import android.widget.AdapterView;
      import com.lzy.imagepicker.ImagePicker;
      import com.lzy.imagepicker.bean.ImageItem;
      import com.lzy.imagepicker.ui.ImageGridActivity;
      import com.lzy.imagepicker.ui.ImagePreviewDelActivity;
      import com.lzy.imagepicker.view.CropImageView;
      import java.util.ArrayList;
      import java.util.List;
      import okhttp3.Call;
      public class MainActivity extends AppCompatActivity implements ImagePickerAdapter.OnRecyclerViewItemClickListener{
         public static final int IMAGE_ITEM_ADD = -1;
         public static final int REQUEST_CODE_SELECT = 100;
         public static final int REQUEST_CODE_PREVIEW = 101;
         private ImagePickerAdapter adapter;
         private ArrayList<ImageItem> selImageList; //当前选择的所有图片
         private int maxImgCount = 8;               //允许选择图片最大数
         private HttpUtil httpUtil;
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              httpUtil = new HttpUtil();
              findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
                      uploadImage(selImageList);
                  }
              });
             //最好放到 Application oncreate执行
              initImagePicker();
              initWidget();
          }
         private void initImagePicker() {
             ImagePicker imagePicker = ImagePicker.getInstance();
              imagePicker.setImageLoader(new GlideImageLoader());   //设置图片加载器
              imagePicker.setShowCamera(true);                      //显示拍照按钮
              imagePicker.setCrop(true);                            //允许裁剪(单选才有效)
              imagePicker.setSaveRectangle(true);                   //是否按矩形区域保存
              imagePicker.setSelectLimit(maxImgCount);              //选中数量限制
              imagePicker.setMultiMode(false);                      //多选
              imagePicker.setStyle(CropImageView.Style.RECTANGLE);  //裁剪框的形状
              imagePicker.setFocusWidth(800);                       //裁剪框的宽度。单位像素(圆形自动取宽高最小值)
              imagePicker.setFocusHeight(800);                      //裁剪框的高度。单位像素(圆形自动取宽高最小值)
              imagePicker.setOutPutX(1000);                         //保存文件的宽度。单位像素
              imagePicker.setOutPutY(1000);                         //保存文件的高度。单位像素
          }
         private void initWidget() {
             RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
              selImageList = new ArrayList<>();
              adapter = new ImagePickerAdapter(this, selImageList, maxImgCount);
              adapter.setOnItemClickListener(this);
              recyclerView.setLayoutManager(new GridLayoutManager(this, 4));
              recyclerView.setHasFixedSize(true);
              recyclerView.setAdapter(adapter);
          }
         private SelectDialog showDialog(SelectDialog.SelectDialogListener listener, List<String> names) {
             SelectDialog dialog = new SelectDialog(this, R.style.transparentFrameWindowStyle, listener, names);
             if (!this.isFinishing()) {
                  dialog.show();
              }
             return dialog;
          }
         @Override
         public void onItemClick(View view, int position) {
             switch (position) {
                 case IMAGE_ITEM_ADD:
                      List<String> names = new ArrayList<>();
                      names.add("拍照");
                      names.add("相册");
                      showDialog(new SelectDialog.SelectDialogListener() {
                         @Override
                         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                             switch (position) {
                                 case 0: // 直接调起相机
                                     //打开选择,本次允许选择的数量
                                      ImagePicker.getInstance().setSelectLimit(maxImgCount - selImageList.size());
                                     Intent intent = new Intent(MainActivity.this, ImageGridActivity.class);
                                      intent.putExtra(ImageGridActivity.EXTRAS_TAKE_PICKERS,true); // 是否是直接打开相机
                                      startActivityForResult(intent, REQUEST_CODE_SELECT);
                                     break;
                                 case 1:
                                     //打开选择,本次允许选择的数量
                                      ImagePicker.getInstance().setSelectLimit(maxImgCount - selImageList.size());
                                     Intent intent1 = new Intent(MainActivity.this, ImageGridActivity.class);
                                      startActivityForResult(intent1, REQUEST_CODE_SELECT);
                                     break;
                                 default:
                                     break;
                              }
                          }
                      }, names);
                     break;
                 default:
                     //打开预览
                     Intent intentPreview = new Intent(this, ImagePreviewDelActivity.class);
                      intentPreview.putExtra(ImagePicker.EXTRA_IMAGE_ITEMS, (ArrayList<ImageItem>) adapter.getImages());
                      intentPreview.putExtra(ImagePicker.EXTRA_SELECTED_IMAGE_POSITION, position);
                      intentPreview.putExtra(ImagePicker.EXTRA_FROM_ITEMS,true);
                      startActivityForResult(intentPreview, REQUEST_CODE_PREVIEW);
                     break;
              }
          }
         @Override
         protected void onActivityResult(int requestCode, int resultCode, Intent data) {
             super.onActivityResult(requestCode, resultCode, data);
             if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {
                 //添加图片返回
                 if (data != null && requestCode == REQUEST_CODE_SELECT) {
                      ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
                     if (images != null){
                          selImageList.addAll(images);
                          adapter.setImages(selImageList);
                      }
                  }
              } else if (resultCode == ImagePicker.RESULT_CODE_BACK) {
                 //预览图片返回
                 if (data != null && requestCode == REQUEST_CODE_PREVIEW) {
                      ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_IMAGE_ITEMS);
                     if (images != null){
                          selImageList.clear();
                          selImageList.addAll(images);
                          adapter.setImages(selImageList);
                      }
                  }
              }
          }
         private String url="http...";
         private void uploadImage(ArrayList<ImageItem> pathList) {
              httpUtil.postFileRequest(url, null, pathList, new MyStringCallBack() {
                 @Override
                 public void onError(Call call, Exception e, int id) {
                     super.onError(call, e, id);
                  }
                 @Override
                 public void onResponse(String response, int id) {
                     super.onResponse(response, id);
                     //返回图片的地址
                  }
              });
          }
      }
  
 


Demo地址:https://github.com/yechaoa/UploadImage



文章来源: blog.csdn.net,作者:yechaoa,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/yechaoa/article/details/70919827

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。