小红书图片剪裁框架+微信图片选择器+超高清大图预览+图片自定义比例剪裁,支持 UI 自定义、支持跨进程回调(1)

  • 支持单图留白剪裁(仿最新微信图片头像选择),支持生成透明背景图(2.4.5 版本加入)

  • 小红书剪裁样式支持视频多选和预览

  • 微信样式支持图片和视频文件混合选择或指定类型选择

  • 微信样式支持保存上一次选中的图片状态

  • 微信样式支持屏蔽上一次选中的图片

  • 选择结果直接回调,拒绝配置 ActivityForResult+requestCode,即调用即处理

  • 支持选择器调用失败回调(2.4.4 版本加入)

  • 支持自定义回调类型(2.4.5 版本加入)

  • 轻量级,aar 大小不超过 300K,无 so 库,无任何第三方依赖

  • 支持 androidx 和 support

  • 永久维护

  • 支持直接回调媒体相册列表及文件列表数据(2.4.6 版本加入)

  • 支持选择器所有文案定制(2.4.6 版本加入)

  • androidx 已适配 AndroidQ,support 版本不支持 29(2.4.6 版本加入)

  • 支持直接拍摄视频(2.4.6 版本加入)

引入依赖

androidx 版本:

implementation ‘com.ypx.yimagepicker:androidx:2.4.6.2’

support 版本: (不支持 targetSdkVersion>=29,最高兼容 28)

implementation ‘com.ypx.yimagepicker:support:2.4.6’

核心原理

YImagePicker 与主项目通过 presenter 进行交互与解耦,presenter 采用序列化接口的方式实现。回调采用嵌入 fragment 的方式实现,类似于 Glide 或 RxPermisson.原理上还是使用 OnActivityResult,但无需再配置 requestCode 并且支持跨进程回调。

小红书样式需要实现:ICropPickerBindPresenter 微信样式需要实现:IMultiPickerBindPresenter

点击查看详细 API 文档

apk 体验地址

效果图集

  • demo 效果

demo 效果

  • 小红书样式

小红书样式 小红书样式 小红书样式

  • 微信样式

微信样式 微信样式 微信样式

  • 自定义样式

自定义样式 自定义样式

  • 自定义比例剪裁

自定义比例剪裁 自定义比例剪裁

点击查看详细 API 文档

微信图片选择

支持视频、GIF、长图选择,支持选择状态保存。调用前请按照 demo 实现 IMultiPickerBindPresenter 接口 ,示例如下:

ImagePicker.withMulti(new WXImgPickerPresenter())//指定 presenter

.setMaxCount(9)//设置选择的最大数

.setColumnCount(4)//设置列数

.mimeType(MimeType.ofAll())//设置要加载的文件类型,可指定单一类型

.filterMimeType(MimeType.GIF)//设置需要过滤掉加载的文件类型

.showCamera(true)//显示拍照

.setPreview(true)//开启预览

.setVideoSinglePick(true)//设置视频单选

.setSinglePickImageOrVideoType(true)//设置图片和视频单一类型选择

.setMaxVideoDuration(120000L)//设置视频可选取的最大时长

.setMinVideoDuration(60000L)//设置视频可选取的最小时长

.setLastImageList(null)//设置上一次操作的图片列表,下次选择时默认恢复上一次选择的状态

.setShieldList(null)//设置需要屏蔽掉的图片列表,下次选择时已屏蔽的文件不可选择

.pick(this, new OnImagePickCompleteListener() {

@Override

public void onImagePickComplete(ArrayList items) {

//图片选择回调,主线程

}

});

小红书图片选择

高仿小红书图片剪裁框架,支持视频以及多图剪裁、支持视频预览,支持 UI 自定义,支持 fragment 样式侵入。调用前请按照 demo 实现 ICropPickerBindPresenter 接口 ,示例如下:

ImagePicker.withCrop(new RedBookCropPresenter())//设置 presenter

.setMaxCount(9)//设置选择数量

.showCamera(true)//设置显示拍照

.setColumnCount(4)//设置列数

.mimeType(MimeType.ofImage())//设置需要加载的文件类型

.filterMimeType(MimeType.GIF)//设置需要过滤掉的文件类型

.setFirstImageItem(null)//设置上一次选中的图片

.setFirstImageUrl(null)//设置上一次选中的图片地址

.setVideoSinglePick(true)//设置视频单选

.setCropPicSaveFilePath(“剪裁图片保存路径”)

.setMaxVideoDuration(2000L)//设置可选取的最大视频时长

.setMinVideoDuration(60000L)//设置视频可选取的最小时长

.pick(this, new OnImagePickCompleteListener() {

@Override

public void onImagePickComplete(ArrayList items) {

//图片剪裁回调,主线程

//注意:剪裁回调里的 ImageItem 中 getCropUrl()才是剪裁过后的图片地址

}

});

预览

支持普通预览和编辑预览,示例如下:

//配置需要预览的所有图片列表

ArrayList allPreviewImageList = new ArrayList<>();

//默认选中的图片索引

int defaultPosition = 0;

//开启编辑预览

ImagePicker.preview(this, new WXImgPickerPresenter(), allPreviewImageList, defaultPosition, new OnImagePickCompleteListener() {

@Override

public void onImagePickComplete(ArrayList items) {

//图片编辑回调,主线程

}

});

拍照

支持直接打开摄像头拍照,示例如下:

ImagePicker.takePhoto(this, “拍照保存路径”, new OnImagePickCompleteListener() {

@Override

public void onImagePickComplete(ArrayList items) {

//拍照回调,主线程

}

});

拍摄视频

支持直接打开摄像头拍视频,示例如下:

ImagePicker.takeVideo(this, “视频保存路径”, new OnImagePickCompleteListener() {

@Override

public void onImagePickComplete(ArrayList items) {

//拍照回调,主线程

}

});

调用选择器并剪裁

支持选择图片完调用剪裁,支持自定义比例剪裁,支持圆形剪裁,示例如下:

ImagePicker.withMulti(new WXImgPickerPresenter())

.mimeType(MimeType.ofImage())

.filterMimeType(MimeType.GIF)

//设置剪裁比例

.setCropRatio(1,1)

.cropSaveFilePath(“剪裁图片保存路径”)

//设置剪裁框间距,单位 px

.cropRectMinMargin(50)

//是否圆形剪裁,圆形剪裁时,setCropRatio 无效

.cropAsCircle()

//设置剪裁模式,留白或充满 CropConfig.STYLE_GAP 或 CropConfig.STYLE_FILL

.cropStyle(CropConfig.STYLE_FILL)

//设置留白模式下生成的图片背景色,支持透明背景

.cropGapBackgroundColor(Color.TRANSPARENT)

.crop(this, new OnImagePickCompleteListener() {

@Override

public void onImagePickComplete(ArrayList items) {

//图片剪裁回调,主线程

}

});

拍照并剪裁

支持直接打开摄像头拍照并剪裁,支持自定义比例剪裁和圆形剪裁,示例如下:

//配置剪裁属性

CropConfig cropConfig = new CropConfig();

//设置剪裁比例

cropConfig.setCropRatio(1, 1);

//设置剪裁框间距,单位 px

cropConfig.setCropRectMargin(100);

cropConfig.setCropSaveFilePath(“剪裁生成的图片路径”);

//是否圆形剪裁,圆形剪裁时,setCropRatio 无效

cropConfig.setCircle(false);

//设置剪裁模式,留白或充满 CropConfig.STYLE_GAP 或 CropConfig.STYLE_FILL

cropConfig.setCropStyle(CropConfig.STYLE_GAP);

//设置留白模式下生成的图片背景色,支持透明背景

cropConfig.setCropGapBackgroundColor(Color.TRANSPARENT );

//调用拍照

ImagePicker.takePhotoAndCrop(this, new WXImgPickerPresenter(), cropConfig,

new OnImagePickCompleteListener() {

@Override

public void onImagePickComplete(ArrayList items) {

//剪裁回调,主线程

}

});

直接剪裁

支持直接跳转剪裁页面,示例如下:

CropConfig cropConfig = new CropConfig();

//设置剪裁比例

cropConfig.setCropRatio(1, 1);

//设置剪裁框间距,单位 px

cropConfig.setCropRectMargin(100);

cropConfig.setCropSaveFilePath(“剪裁生成的图片路径”);

//是否圆形剪裁,圆形剪裁时,setCropRatio 无效

cropConfig.setCircle(false);

//设置剪裁模式,留白或充满 CropConfig.STYLE_GAP 或 CropConfig.STYLE_FILL

cropConfig.setCropStyle(CropConfig.STYLE_GAP);

//设置留白模式下生成的图片背景色,支持透明背景

cropConfig.setCropGapBackgroundColor(Color.TRANSPARENT );

//调用剪裁

String needCropImageUrl=“需要剪裁的图片路径”;

ImagePicker.crop(this, new WXImgPickerPresenter(), cropConfig, needCropImageUrl,

new OnImagePickCompleteListener() {

@Override

public void onImagePickComplete(ArrayList items) {

//剪裁回调,主线程

}

});

提供媒体数据——支持回调相册数据、所有媒体数据、指定相册内媒体数据

获取媒体相册数据

//指定要回调的相册类型,可以指定 13 种图片视频文件格式混合

Set mimeTypes = MimeType.ofAll();

ImagePicker.provideMediaSets(this, mimeTypes, new MediaSetsDataSource.MediaSetProvider() {

@Override

public void providerMediaSets(ArrayList imageSets) {

//相册列表回调,主线程

}

});

获取全部媒体文件

//指定要回调的相册类型,可以指定 13 种图片视频文件格式混合

Set mimeTypes = MimeType.ofAll();

ImagePicker.provideAllMediaItems(this, mimeTypes, new MediaItemsDataSource.MediaItemProvider() {

@Override

public void providerMediaItems(ArrayList imageItems, ImageSet allVideoSet) {

//全部媒体数据回调,主线程

//只有当 mimeTypes 既包含图片或者视频格式文件时,allVideoSet 才有值

}

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助**。

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-p6Yj0HPz-1715899721716)]

[外链图片转存中…(img-vqJRtNVD-1715899721717)]

[外链图片转存中…(img-vZPz7wfn-1715899721717)]

[外链图片转存中…(img-CesJT87m-1715899721718)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值