图片选择器 PicturePicker 的封装

作者: SharryChoo | 来源:发表于2018-07-04 12:51 被阅读147次

效果展示

  1. 相机

    相机.gif
  2. 裁剪

    裁剪.gif
  3. Behavior 动画

    动画.gif
  4. 运行时权限申请

    运行时权限.gif

功能简介

  1. 图片选择器

    • 权限申请
    • 选择图片
      • 文件夹的选择
      • 角标视图的绘制
    • 集成系统拍照(后期慢慢替换)
      • 拍照后的图片会添加到当前目录和所有文件夹目录
    • 集成系统图片裁剪(后期慢慢替换)
      • 启动裁剪时只能选中一张图片
  2. 拍照(调用系统)

    • 权限申请
    • 7.0 以后指定 FileProvider 的 Authority
    • 指定拍照后的输出目录
    • 指定拍照后的压缩质量
        1. 采样压缩
        1. 质量压缩
    • 集成了图片裁剪
    • 回调拍摄后的图片
    • 刷新文件管理器, 显示该图片
  3. 裁剪(调用系统)

    • 权限申请
    • 7.0 以后指定 FileProvider 的 Authority
    • 指定裁剪输出目录
    • 指定裁剪后图片压缩质量
      • 采用质量压缩
    • 回调裁剪后的图片
    • 刷新文件管理器, 显示该图片
  4. 图片选择器

    • 共享元素
    • 支持拖拽的ViewPager的自定义
      • 拖拽抖动动画

使用方式

  1. 图片选择器(集成了拍照和裁剪)
PicturePickerManager.with(this)
    .setThreshold(etAlbumThreshold.text.toString().toInt())// 一共选中的数量
    .setSpanCount(etSpanCount.text.toString().toInt())// 每行展示的数目
    .isShowScrollBehavior(checkboxAnimation.isChecked)// Behavior 动画
    .setToolbarBackgroundColorRes(R.color.colorPrimary) // Toolbar 背景设置
    .setIndicatorSolidColorRes(R.color.colorPrimary)// 选中指示器的颜色
    .setIndicatorBorderColorRes(R.color.colorPrimary, android.R.color.white)// 指示器边界的颜色
    .setPickerItemBackgroundColorRes(android.R.color.white)// 条目背景色
    // 开启相机支持
    .setCameraSupport(checkboxCamera.isChecked)
    .setFileProviderAuthority("$packageName.FileProvider")// 指定 FileProvider 的 authority, 用于 7.0 获取文件 URI
    .setCameraQuality(80)
    .setCameraDirectory(APP_DIRECTORY)// 相机文件存储路径
    // 开启图片裁剪支持(开启裁剪, 图片最多选择一张)
    .setCropSupport(checkboxCrop.isChecked)
    .setCropDirectory(APP_DIRECTORY)// 裁剪文件存储路径
    .setCropSize(1000, 1000)
    .setCropQuality(80)
    // 图片加载框架注入
    .setPictureLoader { context, uri, imageView -> Glide.with(context).load(uri).into(imageView) }
    // 获取图片选择的回调
    .start { it.forEach { Toast.makeText(this, it, Toast.LENGTH_SHORT).show() } }
  1. 相机(集成了裁剪)
PictureTakeManager.with(this)
    .setFileProviderAuthority("$packageName.FileProvider")// 指定 FileProvider 的 authority, 用于 7.0 获取文件 URI
    .setCameraDirectory(APP_DIRECTORY)
    .setCameraQuality(80)
    // 拍照集成裁剪
    .setCropSupport(true)
    .setCropDirectory(APP_DIRECTORY)
    .setCropSize(1000, 1000)
    .setCropQuality(80)
    // 获取拍照后的图片回调
    .take { Toast.makeText(this, it, Toast.LENGTH_SHORT).show() }
  1. 裁剪
PictureCropManager.with(this)
    .setFileProviderAuthority("$packageName.FileProvider")
    .setCropSize(1000, 1000)// 裁剪框的尺寸
    .setCropQuality(80)// 裁剪后压缩的质量
    .setOriginFile(ORIGIN_IMAGE_PATH)// 裁剪图片的路径
    .setCropDirectory(APP_DIRECTORY)// 裁剪后图片存储目录
    .crop {Toast.makeText(this, it, Toast.LENGTH_SHORT).show() }
  1. 图片查看器
PictureWatcherManager.with(this)
    .setIndicatorBorderColorRes(R.color.colorPrimary, android.R.color.white)// 指示器边界的颜色
    .setIndicatorSolidColorRes(R.color.colorPrimary)// 选中指示器的颜色
    .setIndicatorTextColorRes(android.R.color.white)// 指示器文本颜色
    .setPictureUris(uris, 0)// 需要展示图片集合
    .setSharedElement(imageView)// 共享元素
    .setPictureLoader{ context, uri, imageView -> Glide.with(context).load(uri).into(imageView) }
    .start()

集成方式

GitHub 传送门

相关文章

网友评论

本文标题:图片选择器 PicturePicker 的封装

本文链接:https://www.haomeiwen.com/subject/noreuftx.html