热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android仿微信图片选择器ImageSelector使用详解

这篇文章主要为大家详细介绍了Android仿微信图片选择器ImageSelector的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

今天给大家介绍一个仿微信的图片选择器:ImageSelector。ImageSelector支持图片的单选、限数量的多选和不限数量的多选。支持图片预览和图片文件夹的切换。在上一篇文章 《Android 实现一个仿微信的图片选择器》 中我介绍了ImageSelector的实现思路和分析了它的核心代码,有兴趣的同学可以看一下。完整的代码放在了GitHub,欢迎大家下载和使用。本篇文章为大家介绍ImageSelector的具体使用方式。

先上效果图:

1、引入依赖

在Project的build.gradle在添加以下代码

 allprojects {
 repositories {
 ...
 maven { url 'https://jitpack.io' }
 }
 }

在Module的build.gradle在添加以下代码

compile 'com.github.donkingliang:ImageSelector:1.2.0'

2、配置AndroidManifest.xml

//储存卡的读取权限


//图片选择Activity


//图片预览Activity


//图片剪切Activity


3、调起图片选择器

ImageSelector支持图片的单选、限数量的多选和不限数量的多选。在调起图片选择器的时候需要告诉选择器,是那种情况。为了方便大家的使用,我在项目中提供了一个工具类,可以方便地调起选择器。

 /**
 * 打开相册,选择图片,可多选,不限数量。
 *
 * @param activity
 * @param requestCode
 */
 public static void openPhoto(Activity activity, int requestCode) {
 openPhoto(activity, requestCode, false, 0);
 }

 /**
 * 打开相册,选择图片,可多选,限制最大的选择数量。
 *
 * @param activity
 * @param requestCode
 * @param isSingle 是否单选
 * @param maxSelectCount 图片的最大选择数量,小于等于0时,不限数量,isSingle为false时才有用。
 */
 public static void openPhoto(Activity activity, int requestCode,
   boolean isSingle, int maxSelectCount) {
 ImageSelectorActivity.openActivity(activity, requestCode, isSingle, maxSelectCount);

 /**
 * 打开相册,单选图片并剪裁。
 *
 * @param activity
 * @param requestCode
 */
 public static void openPhotoAndClip(Activity activity, int requestCode) {
 ClipImageActivity.openActivity(activity, requestCode);
 }

工具类里只有简单的两个方法,至于里面的实现逻辑就直接交给了ImageSelectorActivity自己处理,调用者无需关心。调起选择器只需要简单的一句代码就可以了。

 //单选
 ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE, true, 0);

//限数量的多选(比喻最多9张)
ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE, false, 9);

//不限数量的多选
ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE);
//或者
ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE, false, 0);

//单选并剪裁
ImageSelectorUtils.openPhotoAndClip(MainActivity.this, REQUEST_CODE);

REQUEST_CODE就是调用者自己定义的启动Activity时的requestCode,这个相信大家都能明白。

4、接收选择器返回的数据

在Activity的onActivityResult方法中接收选择器返回的数据。

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if (requestCode == REQUEST_CODE && data != null) {
 //获取选择器返回的数据
 ArrayList images = data.getStringArrayListExtra(
 ImageSelectorUtils.SELECT_RESULT);
 }
 }

ImageSelectorUtils.SELECT_RESULT是接收数据的key。数据是以ArrayList的字符串数组返回的,就算是单选,返回的也是ArrayList数组,只不过这时候ArrayList只有一条数据而已。ArrayList里面的数据就是选中的图片的文件路径。

ImageSelector的使用就介绍到这里了。

最后给出ImageSelector的项目地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • Android 6.0 切换指定 Wi-Fi 的解决方案
    本文详细介绍了在 Android 6.0 系统中切换到指定 Wi-Fi 的方法,包括常见的问题、原因分析及解决方案。通过官方文档和代码示例,帮助开发者更好地理解和实现这一功能。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 程序员如何优雅应对35岁职业转型?这里有深度解析
    本文探讨了程序员在职业生涯中如何通过不断学习和技能提升,优雅地应对35岁左右的职业转型挑战。我们将深入分析当前热门技术趋势,并提供实用的学习路径。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 解决Spring Boot项目创建失败的问题
    在尝试创建新的Spring Boot项目时遇到了一些问题,具体表现为在项目创建过程中的两个关键步骤出现错误。本文将详细探讨这些问题及其解决方案。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 离线安装Grafana Cloudera Manager插件并监控CDH集群
    本文详细介绍如何离线安装Cloudera Manager (CM) 插件,并通过Grafana监控CDH集群的健康状况和资源使用情况。该插件利用CM提供的API接口进行数据获取和展示。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 本文详细介绍如何在 iOS 7 环境下申请苹果开发者账号,涵盖从访问开发者网站到最终激活账号的完整流程。包括选择个人或企业账号类型、付款方式及注意事项等。 ... [详细]
  • 本文介绍了如何通过Java代码计算一个整数的位数,并展示了多个基础编程示例,包括求和、平均分计算、条件判断等。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本文介绍了一个基于 Java SpringMVC 和 SSM 框架的综合系统,涵盖了操作日志记录、文件管理、头像编辑、权限控制、以及多种技术集成如 Shiro、Redis 等,旨在提供一个高效且功能丰富的开发平台。 ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 深入解析:OpenShift Origin环境下的Kubernetes Spark Operator
    本文探讨了如何在OpenShift Origin平台上利用Kubernetes Spark Operator来管理和部署Apache Spark集群与应用。作为Radanalytics.io项目的一部分,这一开源工具为大数据处理提供了强大的支持。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
author-avatar
牛玺峻国_781
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有