AlbumCameraRecorderX
这个版本是AndroidX版本的分支。任何版本号后面带X的都是基于AndroidX版本。
目前已在正式项目中投入使用。
如果您有任何建议或想要添加功能,可以在Issues中提出
English
这是一个高效的多媒体支持操作库,可以通过简单的配置操作照片、相册、录音、录像等功能。
还支持图片、视频、音频的9宫格展示功能。
- 这个开源库的部分代码来自 Matisse。
- 这个开源库的相机代码来自 CameraView。
非X版本分支
非X库版本,不再维护(https://github.com/zhongjhATC/AlbumCameraRecorder/tree/master)
特性
- 拍照功能完全支持自定义!更多详情请查看Demo的使用方法,如果需要深入了解,您需要了解更多代码 CameraFragment架构介绍
- 支持相册、录音、录像等功能一体化(类似抖音等),也可以单独配置其中一个功能。
- 支持自定义权限请求,可以直接让库完成权限请求
- 虽然功能众多,但可以根据需求引入部分库
- 丰富的回调接口和调试信息,使用现有API可以实现丰富的效果。
- 兼容性强,无论是低版本的4.1还是当前最新版本的Android 13,都进行了相关的兼容处理
- 支持所有图片读取和处理的自定义,比如自定义Glide、Fresco等
- 支持从相册中选择图片
- 支持相册根据手机文件选择不同文件夹
- 高度自定义,支持各种最大选择多少张图片、视频等,还支持只显示自定义文件大小
- 支持自定义相册样式、颜色、大小等
- 拍照时支持闪光灯和前后摄像头切换
- 录像和拍照时支持双指触摸缩放,单指上下滑动控制亮度
- 录像、拍照、按钮等所有UI都可自定义,所有SVG图片都很好处理动画细节
- 录像支持分段录制,未来将添加视频编辑
- 图片编辑支持涂鸦、输入文字、马赛克处理、旋转、裁剪等处理
- 支持录音处理
- 所有录制的照片都可以进行深度压缩,图片可以自定义压缩,Demo提供了LuBan压缩,视频提供了FFMPEG压缩
- 完善的缓存管理系统
- 改进的动画效果,后续会继续添加
- 性能优化,内存泄漏 -- 都经过仔细处理
导入
步骤 1. 在你的build文件中添加JitPack仓库
allprojects {
repositories {
...
maven { url 'https://www.jitpack.io' }
}
}
步骤 2. 添加依赖
dependencies {
// 如果你想简化代码并同时使用multilibrary和progresslibrary、albumCameraRecorderCommon,可以直接使用组合库
implementation 'com.github.zhongjhATC.AlbumCameraRecorder:combined:1.1.100X'
// 公共库,如果不使用上面的组合库
implementation 'com.github.zhongjhATC.AlbumCameraRecorder:common:1.1.100X'
// 核心库,用于调用显示相册、屏幕录制、录音等
implementation 'com.github.zhongjhATC.AlbumCameraRecorder:multilibrary:1.1.100X'
// 主要用于获取数据后显示相关上传进度。如果你只需要获取照片、视频和录音,不需要使用这个
implementation 'com.github.zhongjhATC.AlbumCameraRecorder:progresslibrary:1.1.100X'
// 与编辑图片一起使用
implementation 'com.github.zhongjhATC.AlbumCameraRecorder:imageedit:1.1.100X'
// 支持编辑视频使用,目前只有压缩功能,继续添加相关功能,因为库使用ffmpeg,占用文件大小25M,根据实际情况选择是否使用
implementation 'com.github.zhongjhATC.AlbumCameraRecorder:videoedit:1.1.100X'
// 因为库使用mp4parser,占用文件大小约300kb,根据实际情况选择是否使用
implementation 'com.github.zhongjhATC.AlbumCameraRecorder:videomerge:1.1.100X'
}
快照
市场常用手机兼容性测试
100%通过兼容性测试报告。
使用(建议下载Demo了解更多功能)
启用多媒体相关功能
// 拍摄相关设置
CameraSetting cameraSetting = new CameraSetting();
// 支持的类型:图片、视频
cameraSetting.mimeTypeSet(MimeType.ofAll());
// 相册
mAlbumSetting = new AlbumSetting(false)
// 支持的类型:图片、视频
.mimeTypeSet(MimeType.ofAll())
// 是否显示多选图片的数量
.countable(true)
// 自定义过滤器
.addFilter(new GifSizeFilter(320, 320, 5 * BaseFilter.K * BaseFilter.K))
// 开启原图
.originalEnable(true)
// 最大原图大小,仅当originalEnable为true时有效
.maxOriginalSize(10);
// 录音
RecorderSetting recorderSetting = new RecorderSetting();
// 全局设置
GlobalSetting globalSetting = MultiMediaSetting.from(MainActivity.this).choose(MimeType.ofAll());
globalSetting.cameraSetting(cameraSetting);
globalSetting.albumSetting(albumSetting);
globalSetting.recorderSetting(recorderSetting);
mGlobalSetting
.setOnMainListener(errorMessage -> {
Log.d(TAG, errorMessage);
Toast.makeText(MainSimpleActivity.this.getApplicationContext(), errorMessage, Toast.LENGTH_LONG).show();
})
// 设置路径和7.0保护路径等
.allStrategy(new SaveStrategy(true, "com.zhongjh.cameraapp.fileprovider", "aabb"))
// 用于 glide-V4
.imageEngine(new Glide4Engine())
// 最多5张图片或最多3个视频
.maxSelectablePerMediaType(null,
5,
3,
3,
alreadyImageCount,
alreadyVideoCount,
alreadyAudioCount)
.forResult(REQUEST_CODE_CHOOSE);
获取相关返回数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK)
return;
List<LocalFile> result = MultiMediaSetting.obtainLocalFileResult(data);
}
不要忘记这个配置。否则,在录制和保存文件时会报错、相册选择图片预览确认时Uri会被清除
如果还有其他常见问题,您可以在网站上搜索错误关键词
如果您需要修改拍摄和录制界面及逻辑
请参考Demo进行简单扩展。如果您需要深入了解更多扩展内容,请参考CameraFragment的简单架构
如果您需要修改相机拍摄、录制参数
由于内部相机来自CameraView,因此更改分辨率、关闭录音等功能可以访问查看更多接口。那么我们如何从我们的库中获取可以在Demo实例中使用的CameraView呢?
如果您需要使用九宫格展示的数据,可以查看代码了解详情。
相关API,更多API和支持持续添加丰富
如果您使用了展示库,以下API也对您有用
历史更新
Apk直接体验下载
- 1.1.29x版本可能与当前最新代码版本略有不同 Gitcode下载地址