Android图片选择新标杆:PictureSelector Library全面解析与实战指南

Android图片选择新标杆:PictureSelector Library全面解析与实战指南

【免费下载链接】PictureSelector Picture Selector Library for Android or 图片选择器 【免费下载链接】PictureSelector 项目地址: https://gitcode.com/gh_mirrors/pict/PictureSelector

你是否还在为Android应用中的图片选择功能开发而烦恼?从相册获取图片、视频、音频,到拍照、裁剪、压缩,每个环节都可能遇到兼容性问题或复杂的代码实现。PictureSelector Library(图片选择器)作为一款针对Android平台的开源框架,彻底解决了这些痛点,支持Android 5.0+系统,提供一站式图片选择解决方案。本文将带你全面了解PictureSelector的核心功能、集成方法和实战技巧,帮助你快速实现专业级图片选择功能。

项目概述

PictureSelector是一款功能全面的Android图片选择框架,支持从相册获取媒体文件、拍照、裁剪、压缩等多种功能,并提供主题自定义配置。项目结构清晰,模块化设计使得功能扩展和定制极为方便。

核心模块

  • selector:图片选择核心功能模块,负责相册浏览、媒体文件选择等基础功能,源代码位于selector/
  • ucrop:图片裁剪模块,基于uCrop实现,支持多种裁剪模式,源代码位于ucrop/
  • compress:图片压缩模块,提供高效的图片压缩功能,源代码位于compress/
  • camerax:自定义相机模块,基于CameraX实现,支持拍照功能,源代码位于camerax/

项目文档

核心功能展示

PictureSelector提供了丰富的功能和灵活的配置选项,满足不同场景下的图片选择需求。以下是几种典型风格的展示:

默认风格

默认风格提供简洁直观的图片选择界面,支持预览和多图裁剪功能。

默认风格预览多图裁剪
默认风格预览多图裁剪

数字风格

数字风格以数字标记选中状态,适合需要直观显示选择顺序的场景。

数字风格预览多图裁剪
数字风格预览多图裁剪

白色风格

白色风格采用简洁的白色主题,适合现代UI设计,支持单图裁剪功能。

白色风格预览单图裁剪
白色风格预览单图裁剪

微信风格

微信风格模仿微信的图片选择界面,提供相册目录浏览、单选模式和头像裁剪功能。

相册目录单选模式头像裁剪
相册目录单选模式头像裁剪

多媒体支持

除了图片选择,PictureSelector还支持视频和音频选择,满足多样化的媒体选择需求。

白色风格视频音频
白色风格视频音频

快速集成指南

环境要求

  • Android 5.0+ (API level 21+)
  • Gradle 7.0+

集成步骤

  1. 添加依赖

在项目的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'
}
  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_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />

对于Android 11及以上版本,使用相机功能需要添加以下查询:

<queries package="${applicationId}">
    <intent>
        <action android:name="android.media.action.IMAGE_CAPTURE" />
    </intent>
    <intent>
        <action android:name="android.media.action.ACTION_VIDEO_CAPTURE" />
    </intent>
</queries>

基础使用教程

初始化图片引擎

PictureSelector支持多种图片加载引擎,如Glide、Picasso和Coil。以下是使用Glide引擎的示例:

// GlideEngine.java
public class GlideEngine implements ImageEngine {
    // 实现图片加载相关方法
    // ...
}

图片引擎实现类位于app/src/main/java/com/luck/pictureselector/目录下,包括GlideEngine.javaPicassoEngine.java和CoilEngine.java。

打开相册选择图片

PictureSelector.create(this)
    .openGallery(SelectMimeType.ofImage()) // 选择图片类型
    .setImageEngine(GlideEngine.createGlideEngine()) // 设置图片引擎
    .forResult(new OnResultCallbackListener<LocalMedia>() {
        @Override
        public void onResult(ArrayList<LocalMedia> result) {
            // 处理选择结果
            for (LocalMedia media : result) {
                // 获取图片路径等信息
                String path = media.getPath();
                // ...
            }
        }

        @Override
        public void onCancel() {
            // 取消选择
        }
    });

单独拍照

PictureSelector.create(this)
    .openCamera(SelectMimeType.ofImage()) // 拍照类型
    .forResult(new OnResultCallbackListener<LocalMedia>() {
        @Override
        public void onResult(ArrayList<LocalMedia> result) {
            // 处理拍照结果
            if (!result.isEmpty()) {
                String path = result.get(0).getPath();
                // ...
            }
        }

        @Override
        public void onCancel() {
            // 取消拍照
        }
    });

预览媒体文件

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, mediaList); // mediaList为要预览的媒体文件列表

高级功能配置

自定义主题

PictureSelector支持自定义主题样式,通过setSelectorUIStyle()方法配置:

.setSelectorUIStyle(new SelectorUIStyle() {
    @Override
    public int getTitleBarBackgroundColor(Context context) {
        return ContextCompat.getColor(context, R.color.colorPrimary);
    }
    // 其他样式配置...
})

主题相关资源文件位于selector/src/main/res/values/目录,包括colors.xmlstyles.xml等。

图片裁剪

配置图片裁剪功能:

.setCropEngine(new CropFileEngine() {
    @Override
    public void onStartCrop(Fragment fragment, Uri srcUri, Uri destinationUri, ArrayList<String> dataSource, int requestCode) {
        // 自定义裁剪逻辑
        UCrop.of(srcUri, destinationUri)
            .withAspectRatio(1, 1)
            .start(fragment.getActivity(), fragment, requestCode);
    }
})

裁剪功能实现位于ucrop/模块,相关布局文件如ucrop_activity_photobox.xml

图片压缩

配置图片压缩功能:

.setCompressEngine(new CompressFileEngine() {
    @Override
    public void onStartCompress(Context context, ArrayList<Uri> source, OnKeyValueResultCallbackListener call) {
        // 自定义压缩逻辑
        new CompressImage(context)
            .load(source)
            .compress(new OnCompressListener() {
                @Override
                public void onSuccess(ArrayList<String> paths) {
                    call.onCallback(paths);
                }
                // 其他回调...
            });
    }
})

压缩功能实现位于compress/模块,源代码位于compress/src/main/java/top/zibin/目录。

自定义布局

通过重载布局实现自定义界面:

.setInjectLayoutResourceListener(new OnInjectLayoutResourceListener() {
    @Override
    public int getLayoutResourceId(Context context, int resourceSource) {
        if (resourceSource == InjectResourceType.TYPE_TITLE_BAR) {
            return R.layout.custom_title_bar; // 自定义标题栏布局
        }
        return 0;
    }
})

布局文件位于app/src/main/res/layout/目录,如activity_main.xmlps_custom_title_bar.xml等。

混淆配置

为避免混淆导致功能异常,需要在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** { *; }

混淆配置文件位于app/proguard-rules.pro

兼容性与测试

PictureSelector经过全面的兼容性测试,支持多种Android设备和系统版本。测试报告显示通过率达到100%:

兼容性测试

总结

PictureSelector Library作为一款功能全面、易于集成的Android图片选择框架,为开发者提供了一站式的媒体选择解决方案。从基础的图片选择、拍照,到高级的裁剪、压缩功能,再到灵活的主题自定义和布局重载,PictureSelector都能满足各种场景需求。通过本文的介绍,相信你已经对PictureSelector有了全面的了解,可以开始在项目中集成使用了。

项目地址:https://gitcode.com/gh_mirrors/pict/PictureSelector

【免费下载链接】PictureSelector Picture Selector Library for Android or 图片选择器 【免费下载链接】PictureSelector 项目地址: https://gitcode.com/gh_mirrors/pict/PictureSelector

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值