Android图片选择与上传(ImagePicker)

凤凡
2023-12-01

1.用法

使用前,对于Android Studio的用户,可以选择添加:

compile 'com.lzy.widget:imagepicker:0.6.1'  //指定版本

2.具体使用

  1.首先你需要继承 com.lzy.imagepicker.loader.ImageLoader 这个接口,实现其中的方法,比如以下代码是使用Glide第三方加载库实现的

public class GlideImageLoader implements ImageLoader {

    @Override
    public void displayImage(Activity activity, String path, ImageView imageView, int width, int height) {
        /*Picasso.with(activity)                            //配置上下文
                .load(Uri.fromFile(new File(path)))      //设置图片路径(fix #8,文件名包含%符号 无法识别和显示)
                .error(R.drawable.bg_stack_blur_default)           //设置错误图片
                .placeholder(R.drawable.bg_stack_blur_default)     //设置占位图片
                .into(imageView);*/

        Glide.with(activity)                             //配置上下文
                .load(Uri.fromFile(new File(path)))      //设置图片路径(fix #8,文件名包含%符号 无法识别和显示)
                .error(R.mipmap.default_image)           //设置错误图片
                .placeholder(R.mipmap.default_image)     //设置占位图片
                .diskCacheStrategy(DiskCacheStrategy.ALL)//缓存全尺寸
                .into(imageView);
    }

//在这里注意用glide加载图片的话一定要在下面这个方法 里面也配置上,否者会出现预览图片还有不显示图片
@Override
public void displayImagePreview(Activity activity, String path, ImageView imageView, int width, int height) {
    Glide.with(activity)                             //配置上下文
            .load(Uri.fromFile(new File(path)))      //设置图片路径(fix #8,文件名包含%符号 无法识别和显示)
            .diskCacheStrategy(DiskCacheStrategy.ALL)//缓存全尺寸
            .into(imageView);
}


    @Override
    public void clearMemoryCache() {}
    //这里是清除缓存的方法,根据需要自己实现
}

   2.然后配置图片选择器,一般在Application初始化配置一次就可以,这里就需要将上面的图片加载器设置进来,其余的配置根据需要设置

/**
     * 初始化图片选择器
     */
    private void initImagePicker() {
        ImagePicker imagePicker = ImagePicker.getInstance();
        imagePicker.setImageLoader(new GlideImageLoader());   //设置图片加载器
        imagePicker.setShowCamera(true);                      //显示拍照按钮
        imagePicker.setCrop(false);                            //允许裁剪(单选才有效)
        imagePicker.setSaveRectangle(true);                   //是否按矩形区域保存
        imagePicker.setSelectLimit(maxImgCount);              //选中数量限制
        imagePicker.setStyle(CropImageView.Style.RECTANGLE);  //裁剪框的形状
        imagePicker.setFocusWidth(800);                       //裁剪框的宽度。单位像素(圆形自动取宽高最小值)
        imagePicker.setFocusHeight(800);                      //裁剪框的高度。单位像素(圆形自动取宽高最小值)
        imagePicker.setOutPutX(1000);                         //保存文件的宽度。单位像素
        imagePicker.setOutPutY(1000);                         //保存文件的高度。单位像素
    }

   3.以上配置完成后,在适当的方法中开启相册,例如点击按钮时

/**
     * 插入图片,打开图片选择器
     */
    private void insertPhoto() {
        ImagePicker.getInstance().setSelectLimit(maxImgCount);
        Intent intent = new Intent(NotePadNewActivity.this, ImageGridActivity.class);
        startActivityForResult(intent, 100);
    }

   4.如果你想直接调用相机

Intent intent = new Intent(this, ImageGridActivity.class);
intent.putExtra(ImageGridActivity.EXTRAS_TAKE_PICKERS,true); // 是否是直接打开相机
startActivityForResult(intent, REQUEST_CODE_SELECT);

    5.重写onActivityResult方法,回调结果

private ArrayList<ImageItem> selImageList; //当前选择的所有图片
private int maxImgCount = 9;               //允许选择图片最大数

//适当地方初始化
        selImageList = new ArrayList<>();

@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 == 100) {
                ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
                if (images != null) {
                    selImageList.addAll(images);
                    adapter.setImages(selImageList);
                    for (int i = 0; i < selImageList.size(); i++) {
                        Log.d("图片地址=", selImageList.get(i).path);
                        Toast.makeText(getApplicationContext(), "图片地址=" + selImageList.get(i).path, Toast.LENGTH_SHORT).show();
                    }
                }
            }
        } 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);
                }
            }
        }

 

 

 

 

 

 

 

 

 类似资料: