官方中文正文为项目官方提供的中文文档(原文转载),本站未作翻译、未改动文字,仅剔除图片与无关章节。
PictureSelector 3.0
一款针对Android平台下的图片选择器,支持从相册获取图片、视频、音频&拍照,支持裁剪(单图or多图裁剪)、压缩、主题自定义配置等功能,支持动态获取权限&适配Android 5.0+系统的开源图片选择框架。
如何引用
使用Gradle
repositories {
google()
mavenCentral()
}
dependencies {
// PictureSelector 基础 (必须)
implementation 'io.github.lucksiege:pictureselector:v3.11.2'
// 图片压缩 (按需引入)
implementation 'io.github.lucksiege:compress:v3.11.2'
// 图片裁剪 (按需引入)
implementation 'io.github.lucksiege:ucrop:v3.11.2'
// 自定义相机 (按需引入)
implementation 'io.github.lucksiege:camerax:v3.11.2'
}
Kotlin版本Demo
dependencies {
// 请不要跨版本升级,请先查看Kotlin版Demo
implementation 'io.github.lucksiege:pictureselector:kotlin-v1.0.0-beta'
}
或者Maven:
<dependency>
<groupId>io.github.lucksiege</groupId>
<artifactId>pictureselector</artifactId>
<version>v3.11.2</version>
</dependency>
<dependency>
<groupId>io.github.lucksiege</groupId>
<artifactId>compress</artifactId>
<version>v3.11.2</version>
</dependency>
<dependency>
<groupId>io.github.lucksiege</groupId>
<artifactId>ucrop</artifactId>
<version>v3.11.2</version>
</dependency>
<dependency>
<groupId>io.github.lucksiege</groupId>
<artifactId>camerax</artifactId>
<version>v3.11.2</version>
</dependency>
权限
权限使用说明,请参阅 文档
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
Android 13版本适配,细化存储权限
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
Android 11 使用相机,需要再AndroidManifest.xm 添加如下代码:
<queries package="${applicationId}">
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE">
</action>
</intent>
<intent>
<action android:name="android.media.action.ACTION_VIDEO_CAPTURE">
</action>
</intent>
</queries>
ImageEngine
GlideEngine
PicassoEngine
CoilEngine
进阶使用
想要了解更多功能,请参阅文档
简单用例如下所示:
1、获取图片
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
.setImageEngine(GlideEngine.createGlideEngine())
.forResult(new OnResultCallbackListener<LocalMedia>() {
@Override
public void onResult(ArrayList<LocalMedia> result) {
}
@Override
public void onCancel() {
}
});
使用系统相册
PictureSelector.create(this)
.openSystemGallery(SelectMimeType.ofImage())
.forResult(new OnResultCallbackListener<LocalMedia>() {
@Override
public void onResult(ArrayList<LocalMedia> result) {
}
@Override
public void onCancel() {
}
});
2、单独拍照
PictureSelector.create(this)
.openCamera(SelectMimeType.ofImage())
.forResult(new OnResultCallbackListener<LocalMedia>() {
@Override
public void onResult(ArrayList<LocalMedia> result) {
}
@Override
public void onCancel() {
}
});
Navigation Fragment场景下,单独拍照请使用如下方式:
PictureSelector.create(this)
.openCamera(SelectMimeType.ofImage())
.forResultActivity(new OnResultCallbackListener<LocalMedia>() {
@Override
public void onResult(ArrayList<LocalMedia> result) {
}
@Override
public void onCancel() {
}
});
3、您还可以按如下示例使用:
(1)、注入到任意视图层
PictureSelector.create(this)
.openGallery(SelectMimeType.ofAll())
.setImageEngine(GlideEngine.createGlideEngine())
.buildLaunch(R.id.fragment_container, new OnResultCallbackListener<LocalMedia>() {
@Override
public void onResult(ArrayList<LocalMedia> result) {
}
@Override
public void onCancel() {
}
});
(2)、自行注入到任意视图层
PictureSelectorFragment selectorFragment = PictureSelector.create(this)
.openGallery(SelectMimeType.ofAll())
.setImageEngine(GlideEngine.createGlideEngine())
.build();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, selectorFragment, selectorFragment.getFragmentTag())
.addToBackStack(selectorFragment.getFragmentTag())
.commitAllowingStateLoss();
4、单独获取数据源
(1)、专辑列表
PictureSelector.create(this)
.dataSource(SelectMimeType.ofAll())
.obtainAlbumData(new OnQueryDataSourceListener<LocalMediaFolder>() {
@Override
public void onComplete(List<LocalMediaFolder> result) {
}
);
(2)、相册列表
PictureSelector.create(this)
.dataSource(SelectMimeType.ofAll())
.obtainMediaData(new OnQueryDataSourceListener<LocalMedia>() {
@Override
public void onComplete(List<LocalMedia> result) {
}
);
(3)、根据IBridgeMediaLoader获取指定数据
IBridgeMediaLoader loader = PictureSelector.create(this)
.dataSource(SelectMimeType.ofImage()).buildMediaLoader();
loader.loadAllAlbum(new OnQueryAllAlbumListener<LocalMediaFolder>() {
@Override
public void onComplete(List<LocalMediaFolder> result) {
}
});
5、预览图片、视频、音频
如果预览网络视频AndroidManifest.xml添加如下代码
android:usesCleartextTraffic="true"
PictureSelector.create(this)
.openPreview()
.setImageEngine(GlideEngine.createGlideEngine())
.setExternalPreviewEventListener(new OnExternalPreviewEventListener() {
@Override
public void onPreviewDelete(int position) {
}
@Override
public boolean onLongPressDownload(LocalMedia media) {
return false;
}
}).startActivityPreview(position, true, list);
设置图片选择器主题,更多请参阅 文档
.setSelectorUIStyle();
或者您可以重载布局,更多请参阅文档
.setInjectLayoutResourceListener(new OnInjectLayoutResourceListener() {
@Override
public int getLayoutResourceId(Context context, int resourceSource) {
return 0;
}
高级用例如下所示:
1、使用自定义相机功能,详情请参阅 文档
.setCameraInterceptListener(new OnCameraInterceptListener() {
@Override
public void openCamera(Fragment fragment, int cameraMode, int requestCode){
}
});
2、使用图片压缩功能,详情请参阅 文档
.setCompressEngine(new CompressFileEngine() {
@Override
public void onStartCompress(Context context, ArrayList<Uri> source, OnKeyValueResultCallbackListener call){
}
});
3、使用图片裁剪功能,详情请参阅 文档
.setCropEngine(new CropFileEngine() {
@Override
public void onStartCrop(Fragment fragment, Uri srcUri, Uri destinationUri, ArrayList<String> dataSource, int requestCode) {
}
});
4、使用图片编辑功能,详情请参阅 文档
.setEditMediaInterceptListener(new OnMediaEditInterceptListener() {
@Override
public void onStartMediaEdit(Fragment fragment, LocalMedia currentLocalMedia, int requestCode) {
}
});
5、加载自定义数据源,详情请参阅 文档
.setExtendLoaderEngine(new ExtendLoaderEngine() {
@Override
public void loadAllAlbumData(Context context, OnQueryAllAlbumListener<LocalMediaFolder> query) {
}
@Override
public void loadOnlyInAppDirAllMediaData(Context context, OnQueryAlbumListener<LocalMediaFolder> query) {
}
@Override
public void loadFirstPageMediaData(Context context, long bucketId, int page, int pageSize, OnQueryDataResultListener<LocalMedia> query) {
}
@Override
public void loadMoreMediaData(Context context, long bucketId, int page, int limit, int pageSize, OnQueryDataResultListener<LocalMedia> query) {
}
});
6、自定义权限申请,详情请参阅 文档
.setPermissionsInterceptListener(new OnPermissionsInterceptListener() {
@Override
public void requestPermission(Fragment fragment, String[] permissionArray, OnRequestPermissionListener call) {
}
@Override
public boolean hasPermissions(Fragment fragment, String[] permissionArray) {
return false;
}
});
7、Android 10 及以上版本,沙盒机制文件处理,详情请参阅 文档
.setSandboxFileEngine(new UriToFileTransformEngine() {
@Override
public void onUriToFileAsyncTransform(Context context, String srcPath, String mineType, OnKeyValueResultCallbackListener call) {
}
});
混淆配置
-keep class com.luck.picture.lib.** { *; }
// 如果引入了Camerax库请添加混淆
-keep class com.luck.lib.camerax.** { *; }
// 如果引入了Ucrop库请添加混淆
-dontwarn com.yalantis.ucrop**
-keep class com.yalantis.ucrop** { *; }
-keep interface com.yalantis.ucrop** { *; }
License
Copyright 2016 Luck
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
联系方式
Android开发交流 [662320389]()
Android开发交流 [619458861]()
Android开发交流 [679824206]()
Android开发交流 [854136996]()
QQ [893855882]()
兼容性测试
**腾讯优测-深度测试-通过率达到100%**
演示效果
| 功能列表 |
|---|
| 默认风格 | 预览 | 多图裁剪 |
|---|---|---|
| 数字风格 | 预览 | 多图裁剪 |
|---|---|---|
| 白色风格 | 预览 | 单图裁剪 |
|---|---|---|
| 全新风格 | 预览 | 多图裁剪 |
|---|---|---|
| 相册目录 | 单选模式 | 头像裁剪 |
|---|---|---|
| 白色风格 | 视频 | 音频 |
|---|---|---|
- 本文标题:PictureSelector - Picture Selector Library f
- 本文链接:https://cn121.com/mobile/lucksiege-pictureselector.html
- 原项目:LuckSiege/PictureSelector 版权归原作者 LuckSiege 及贡献者所有
- 收录信息:本站于 2026-10-20 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
- 开源协议:收录时本项目采用 Apache-2.0(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。本站对原文仅作排版与图片地址适配, 并保留原项目的 NOTICE 与署名要求。
- 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 LuckSiege/PictureSelector。
- 内容说明:本页正文为项目官方提供的中文文档(原文转载),本站未作翻译、未改动文字,仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
- 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
- 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。