-
支持选择器所有文案定制(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
效果图集
- 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)

【附】相关架构及资料
源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,和技术大牛一起讨论交流解决问题。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
存中…(img-rvAHs40U-1712404320393)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

【附】相关架构及资料
源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,和技术大牛一起讨论交流解决问题。
[外链图片转存中…(img-RTgMMwxe-1712404320394)]