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

本文介绍了微信风格的AndroidImagePicker库,包括设置视频时长限制、预览、拍照、拍摄视频、图片剪裁、媒体数据获取、自定义回调等功能,并提及了库的版本更新和未来计划。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.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 种图片视频文件格式混合

Set mimeTypes = MimeType.ofAll();

//指定相册,id 不能为空

ImageSet imageSet = new ImageSet();

ImagePicker.provideMediaItemsFromSet(this, imageSet, mimeTypes, new MediaItemsDataSource.MediaItemProvider() {

@Override

public void providerMediaItems(ArrayList imageItems, ImageSet allVideoSet) {

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

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

}

});

预加载获取指定相册内全部媒体文件

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

Set mimeTypes = MimeType.ofAll();

//指定相册,id 不能为空

ImageSet imageSet = new ImageSet();

//预加载个数

int preloadSize = 40;

ImagePicker.provideMediaItemsFromSetWithPreload(this, imageSet, mimeTypes, preloadSize,

new MediaItemsDataSource.MediaItemPreloadProvider() {

@Override

public void providerMediaItems(ArrayList imageItems) {

//预加载回调,预先加载指定数目的媒体文件回调

}

},

new MediaItemsDataSource.MediaItemProvider() {

@Override

public void providerMediaItems(ArrayList imageItems, ImageSet allVideoSet) {

//所有媒体文件回调

}

});

presenter 指定、自定义 Item 样式、自定义皮肤 UI、自定义提示常量、设置选择器调用失败回调、自定义回调类型

详细使用方法请查看详细 API 文档

版本记录

查看详细版本记录

2.4.6 版本 [2019.11.02]

  1. 【BUG 修复】修复了红米拍照闪退问题

  2. 【BUG 修复】取消了选择器没有文件时直接退出选择器的策略。改为提示语句“暂未发现媒体文件”.

  3. 【适配】已适配 AndroidQ,解决 targetSdkVersion 设置 29 时数据库报错的 bug

  4. 【新增】新增直接拍摄视频

  5. 【新增】presenter 新增 overMaxCountTip、interceptPickerCancel、interceptVideoClick、getPickConstants 四个方法

  6. 【新增】新增 PickConstants 用于修改选择器所有文案,在 presenter 中指定

  7. 【新增】支持直接回调媒体数据,其中包含回调相册列表、全部媒体文件、指定相册里媒体文件,支持指定数量预加载。

  8. 【新增】新增退出选择器时拦截回调,新增点击视频 item 的拦截回调,在 presenter 中指定

  9. 【新增】新增视频最小选择时长

  10. 【优化】重构了预览页面,将选择器预览和通用预览分离,降低耦合度

  11. 【优化】统一整理了资源文件命名,以及删除不必要的资源

  12. 【调整】clearAllCache 方法已废弃

  13. 【调整】原有的选择器拍照会直接回调出照片,现在改为生成在选择器的第一个

  14. 【调整】当选择器只加载视频时,拍照 item 支持拍摄视频,其他情况均为拍照

  15. 【优化】选择器调用屏蔽多次点击,调用多次

  16. 【优化】所有不可选择的 item(置灰)选中均会有具体的提示

下个版本排期

时间:2019 年 11 月中旬

  1. 适配 AndroidQ(2.4.6 已支持)

  2. 微信选择器加入原图选项

  3. 支持对外暴露数据源,以便于实现类似 QQ 发消息时的选择图片(2.4.6 已支持)

  4. 实现最新版微信样式

  5. 剪裁支持输出指定大小图片

  6. 等你来提

计划 TODO:

  1. 视频预览框架切换(吐槽:官方 videoView 太难用了/(ㄒoㄒ)/)

  2. 图片剪裁支持旋转

  3. 支持 JPEG、PNG、GIF、BMP、WEBP、MPEG、MP4、QUICKTIME、THREEGPP、THREEGPP2、MKV、WEBM、TS、AVI 等图片视频文件格式混合加载或指定加载(2.4.4 已支持)

永不 TODO:

  1. 不会支持图片压缩,请使用者自行使用 luBan

  2. 不会支持图片和视频高级编辑(滤镜、贴纸等)

感谢

  • 本框架媒体库查询部分借鉴于知乎开源框架 Matisee,并在其基础上拓展并延伸,让查询更富有定制性,在此对原作者表示感谢。

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

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

结尾

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

这里放上一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

结尾

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

这里放上一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~

[外链图片转存中…(img-PF9XKNe1-1712404287035)]

[外链图片转存中…(img-wBczE1na-1712404287035)]

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值