android仿微信的图片选择器

PictureSelector

项目地址: arvinljw/PictureSelector 
简介:包含:多选、单选、拍照、预览、裁剪;兼容大图,兼容 7.0
更多: 作者    提 Bug    示例 APK   
标签:
仿微信图片选择器-

这是一个仿微信的图片选择器。

效果图:

  • 选择界面

  • 预览界面

  • 裁剪界面

  • 选择文件目录界面

Features

1、图片来源:拍照,本地图片媒体库中 jpg 和 png 类型的图片

2、功能:多选、单选、拍照、预览、裁剪

3、todo:优化细节(一些动画)、整理解析文档

Demo 下载地址

PicSelector 下载地址

Usage

1、引用 Lib(Android studio)

通过引用 Module 方式引用,这样会更方便定制

  • 在 AndroidManifest.xml 文件中添加:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
...

<!--7.0 以上拍照适配-->
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="项目包名.takephoto.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

<!--图片选择首页-->
<activity
    android:name="net.arvin.pictureselector.uis.PictureSelectorActivity"
    android:screenOrientation="portrait" />

<!--只拍照和裁剪-->
<activity
    android:name="net.arvin.pictureselector.uis.TakePhotoAndCropActivity"
    android:screenOrientation="portrait" />

注意:provider 的 android:authorities 属性把项目包名换成该项目的包名,因为在手机中,这个属性是不能重复的。

2、修改默认配置

//这是默认设置
PSConfigUtil.getInstance().setCanCrop(false)
                .setCanTakePhoto(true)
                .setMaxCount(9)
                .setStatusBarColor(R.color.ps_colorPrimaryDark);
  • setCanCrop 是否能裁剪,只有 maxCount 为 1 时才有效;
  • setCanTakePhoto 是否支持拍照;
  • setMaxCount 设置一次最多可选择图片的数量;
  • setStatusBarColor 设置状态栏颜色,默认为值"#2f3034"。

3、启动 PictureSelector:

private final int REQUEST_CODE_1 = 1001;
private ArrayList<ImageEntity> selectedImages;
...
PSConfigUtil.getInstance().showSelector(MainActivity.this, REQUEST_CODE_1, selectedImages);
//或者不传参数,注意传递已选择图片的大小不能超过设置的最大数量
PSConfigUtil.getInstance().showSelector(MainActivity.this, REQUEST_CODE_1);

4、启动拍照

private final int REQUEST_CODE_2 = 1002;
PSConfigUtil.getInstance().showTakePhotoAndCrop(MainActivity.this, REQUEST_CODE_2);

5、接收选择的图片数据:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case REQUEST_CODE_1: {
                    selectedImages.clear();
                    List<ImageEntity> temp = data.getParcelableArrayListExtra(PSConstanceUtil.PASS_SELECTED);
                    selectedImages.addAll(temp);

                    PSGlideUtil.loadImage(this, "file://" + temp.get(0).getPath(), img);
                    for (ImageEntity selectedImage : selectedImages) {
                        Log.d("back_data", selectedImage.getPath());
                    }
                    break;
                }
                case REQUEST_CODE_2: {
                    selectedImages.clear();
                    List<ImageEntity> temp = data.getParcelableArrayListExtra(PSConstanceUtil.PASS_SELECTED);
                    selectedImages.addAll(temp);

                    PSGlideUtil.loadImage(this, "file://" + temp.get(0).getPath(), img);
                    for (ImageEntity selectedImage : selectedImages) {
                        Log.d("back_data", selectedImage.getPath());
                    }
                    break;
                }
            }
        }
    }

6、清除图片缓存(删除)

  • 清除裁剪图片:
PSCropUtil.clear();
  • 清除拍照图片
PSTakePhotoUtil.clear();
  • 清除所有
PSConfigUtil.clearCache();

Thanks

  • 图片预览在PhotoView的基础上做了一定的修改;
  • 图片裁剪使用了鸿洋大神的仿微信头像裁剪,加载和裁剪算法并做了一定的修改。
  • 大图显示使用了SubsamplingScaleImageView,并增加裁剪(还有优化空间)
  • 图片加载使用 Glide
  • 事件传递使用 Eventbus
  • 异步操作使用了 Rxjava 和 Rxandroid

在此表示感谢!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值