Android中多图片选择器ImagePicker库的使用(仿微信、非常容易集成)

来源:互联网 发布:js 上传图片预览 编辑:程序博客网 时间:2024/05/25 05:37

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


ImagePicker

Android自定义相册,完全仿微信UI,实现了拍照、图片选择(单选/多选)、 裁剪 、旋转、等功能。

目前该项目原作者已经停止维护,改由南尘进行维护。

目前项目选择回来的图片暂时未做压缩,压缩可以到https://github.com/nanchen2251/CompressHelper

项目编译版本为SDK为25,Tools为25.0.2,如果导入版本和你的主工程不符而导致运行崩溃,请修改你的主工程版本到更高,或者直接import该module。

该项目参考了:

  • https://github.com/pengjianbo/GalleryFinal
  • https://github.com/easonline/AndroidImagePicker

更新日志

V 0.5.0

  • [修复]解决provider冲突问题;

V 0.4.8

  • [修复]解决demo中直接呼起相机并裁剪不会返回数据的bug,不需要这个功能的可以不更新;

V 0.4.7

  • [新增]新增可直接调起相机的功能;
  • [修复]解决可能和主项目provider冲突的潜在问题;
  • [修复]点击图片预览空指针崩溃问题;
  • [修复]使用Intent传值限制导致的崩溃问题;
  • [修复]部分机型拍照后图片旋转问题;
  • [修复]更改选择框图片背景为灰色,以免白色图看不清。

V 0.3.5

  • [新增]提供直接调起相机的方式,并可直接设置牌照是否裁剪;
  • [修复]Android7.0设备调系统相机直接崩溃的问题;
  • [注意]如果出现 java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must not be exported,请直接clean再运行即可。

演示

imageimage imageimage

1.用法

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

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

2.功能和参数含义

温馨提示:目前库中的预览界面有个原图的复选框,暂时只做了UI,还没有做压缩的逻辑

配置参数参数含义multiMode图片选着模式,单选/多选selectLimit多选限制数量,默认为9showCamera选择照片时是否显示拍照按钮crop是否允许裁剪(单选有效)style有裁剪时,裁剪框是矩形还是圆形focusWidth矩形裁剪框宽度(圆形自动取宽高最小值)focusHeight矩形裁剪框高度(圆形自动取宽高最小值)outPutX裁剪后需要保存的图片宽度outPutY裁剪后需要保存的图片高度isSaveRectangle裁剪后的图片是按矩形区域保存还是裁剪框的形状,例如圆形裁剪的时候,该参数给true,那么保存的图片是矩形区域,如果该参数给fale,保存的图片是圆形区域imageLoader需要使用的图片加载器,自需要实现ImageLoader接口即可

3.代码参考

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

    public class PicassoImageLoader 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)))//                    .placeholder(R.mipmap.default_image)//                    .error(R.mipmap.default_image)//                    .resize(width, height)//                    .centerInside()//                    .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)//                    .into(imageView);        }            @Override        public void clearMemoryCache() {            //这里是清除缓存的方法,根据需要自己实现        }    }

1.在你的AndroidManifest.xml文件里面添加下面的

<activity            android:name="com.lzy.imagepicker.ui.ImagePreviewDelActivity"            android:theme="@style/ImagePickerThemeFullScreen"/>

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

protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_image_picker);        ImagePicker imagePicker = ImagePicker.getInstance();        imagePicker.setImageLoader(new PicassoImageLoader());   //设置图片加载器imagePicker.setShowCamera(true);  //显示拍照按钮imagePicker.setCrop(true);        //允许裁剪(单选才有效)imagePicker.setSaveRectangle(true); //是否按矩形区域保存imagePicker.setSelectLimit(9);    //选中数量限制imagePicker.setStyle(CropImageView.Style.RECTANGLE);  //裁剪框的形状imagePicker.setFocusWidth(800);   //裁剪框的宽度。单位像素(圆形自动取宽高最小值)        imagePicker.setFocusHeight(800);  //裁剪框的高度。单位像素(圆形自动取宽高最小值)imagePicker.setOutPutX(1000);//保存文件的宽度。单位像素        imagePicker.setOutPutY(1000);//保存文件的高度。单位像素}

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

public void onClick(View v) {            Intent intent = new Intent(this, ImageGridActivity.class);            startActivityForResult(intent, IMAGE_PICKER);          }    }

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

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

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

@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 == IMAGE_PICKER) {                ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);                MyAdapter adapter = new MyAdapter(images);                gridView.setAdapter(adapter);            } else {                Toast.makeText(this, "没有数据", Toast.LENGTH_SHORT).show();            }        }    }

更多使用,请下载demo参看源代码

demo链接 :  http://download.csdn.net/download/stephen2wong/10126944


1 1
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机不小心调成耳机模式怎么办 不小心把图书馆的书弄坏了怎么办 不小心把图书馆书拿出来了怎么办 八个月宝宝吃母乳缺铁怎么办 大头笔写的字褪色了怎么办 小画板用记号笔画了擦不下来怎么办 新换的大灯和原大灯有色差怎么办? 微信信息写好没有发送两字怎么办 3d模型导进去 材质丢失怎么办 3d模型导入材质没了怎么办 淘宝上的电视尺寸与实际不符怎么办 医师面试题号忘了写怎么办 淘宝买东西东西被别人拿走了怎么办 9个月宝宝上肢支撑不好怎么办 宝宝快十一个月了留口水怎么办 两岁宝宝不会自己登着大小便怎么办 小新家的房子被炸了房贷怎么办 怀孕8个月感冒鼻窦炎头疼怎么办 买的全身镜下面的框子坏了怎么办 单位上司姐姐每天要接我上班怎么办 企业微信公众号中的文章边框怎么办 怎么办我在数学答题卡上画了分割线 游泳的时候泳裙飘起来怎么办 两岁宝宝误服了酵素梅怎么办 人被困在山洞里没有氧气怎么办? 一个人太爱你可你不爱他怎么办 牙齿还没掉又长了新牙齿怎么办 两岁宝宝牙齿发黑烂牙怎么办 怀孕八个月被小孩压到肚子了怎么办 在花场上班客人约我出去玩怎么办 小天才电话手表开不了机怎么办 黑色笔芯弄在白色衣服上怎么办 su文件打开是意外的格式怎么办 su卡的动一下就卡怎么办 犀牛vary渲染的太曝光了怎么办 脑子老是乱想幻想控制不住怎么办 猫抓了破了点皮怎么办 小孩子喜欢玩别人家的玩具怎么办 孩子把别人家的玩具玩坏了怎么办 小新和爸妈一起睡觉那他们怎么办 ps画纸画的时候一直在移动怎么办