从零开始使用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到你的项目中,提升应用的图片处理体验!
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust099- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiMo-V2.5-ProMiMo-V2.5-Pro作为旗舰模型,擅⻓处理复杂Agent任务,单次任务可完成近千次⼯具调⽤与⼗余轮上 下⽂压缩。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00















