从零开始使用PictureSelector Library:新手入门完全指南
你是否还在为Android应用中的图片选择功能开发而烦恼?是否想要一个既支持相册选择又能拍照,还能进行裁剪和压缩的一站式解决方案?PictureSelector Library(图片选择器)正是为解决这些问题而生。本文将带你从零开始,轻松掌握这个强大工具的使用方法,让你的应用图片处理功能更专业、用户体验更出色。
关于PictureSelector Library
PictureSelector Library是一款针对Android平台的开源图片选择框架,支持从相册获取图片、视频、音频,也可以直接拍照,还具备裁剪(单图或多图裁剪)、压缩、主题自定义配置等功能,并且完美支持动态获取权限和Android 5.0及以上系统。
官方文档:README.md
中文文档:README_CN.md
准备工作:下载与安装
1. 下载Demo体验
在开始集成前,建议先下载Demo体验一下功能:app/demo/demo_2023-12-17_060744_v3.11.2.apk
2. 集成到项目
使用Gradle集成是最便捷的方式,在你的build.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'
}
功能概览
PictureSelector提供了丰富的功能,让我们先通过几张截图了解一下它的界面和 capabilities:
| 功能列表 |
|---|
![]() |
| 默认风格 | 预览 | 多图裁剪 |
|---|---|---|
![]() |
![]() |
![]() |
| 数字风格 | 预览 | 多图裁剪 |
|---|---|---|
![]() |
![]() |
![]() |
基础使用
1. 添加权限
在AndroidManifest.xml中添加必要的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<!-- 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.xml中添加:
<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>
2. 初始化ImageEngine
PictureSelector需要图片加载引擎来显示图片,支持Glide、Picasso和Coil等主流图片加载库:
3. 从相册选择图片
以下是从相册选择图片的基本代码示例:
PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
.setImageEngine(GlideEngine.createGlideEngine())
.forResult(new OnResultCallbackListener<LocalMedia>() {
@Override
public void onResult(ArrayList<LocalMedia> result) {
// 处理选择结果
}
@Override
public void onCancel() {
// 处理取消操作
}
});
4. 单独拍照
如果只需要拍照功能,可以使用以下代码:
PictureSelector.create(this)
.openCamera(SelectMimeType.ofImage())
.forResult(new OnResultCallbackListener<LocalMedia>() {
@Override
public void onResult(ArrayList<LocalMedia> result) {
// 处理拍照结果
}
@Override
public void onCancel() {
// 处理取消操作
}
});
进阶使用
1. 自定义主题
PictureSelector支持自定义主题,你可以通过setSelectorUIStyle()方法来设置:
.setSelectorUIStyle();
或者,你也可以通过重载布局来自定义界面:
.setInjectLayoutResourceListener(new OnInjectLayoutResourceListener() {
@Override
public int getLayoutResourceId(Context context, int resourceSource) {
return 0;
}
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) {
// 裁剪逻辑
}
});
更多功能展示
除了上述基础功能,PictureSelector还有许多其他强大的特性:
| 白色风格 | 预览 | 单图裁剪 |
|---|---|---|
![]() |
![]() |
![]() |
| 全新风格 | 预览 | 多图裁剪 |
|---|---|---|
![]() |
![]() |
![]() |
| 相册目录 | 单选模式 | 头像裁剪 |
|---|---|---|
![]() |
![]() |
![]() |
混淆配置
为了保证PictureSelector在release版本中正常工作,需要添加以下混淆规则到你的proguard-rules.pro文件:
-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** { *; }
常见问题
如果你在使用过程中遇到问题,可以查阅:
结语
通过本文的介绍,你应该已经掌握了PictureSelector Library的基本使用方法。这是一个功能强大且灵活的图片选择框架,能够满足大多数Android应用的图片处理需求。
如果你想深入了解更多高级功能,可以查阅官方文档:PictureSelector 3.0 功能api说明
希望这篇指南能帮助你快速集成PictureSelector到你的项目中,提升应用的图片处理体验!
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0194- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
awesome-zig一个关于 Zig 优秀库及资源的协作列表。Makefile00















