image

获取

先在 build.gradle 的 repositories 添加仓库:allprojects {    repositories {

...

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

}

}

再在dependencies添加:dependencies {

implementation 'com.github.limuyang2:LPhotoPicker:版本号'}

在build.gradle中添加以下配置:android {

compileSdkVersion 27

defaultConfig {

………………        //添加以下两句代码

renderscriptTargetApi 27  //版本号请与compileSdkVersion保持一致

renderscriptSupportModeEnabled true

}

}

使用使用前,记得获取权限!‘Manifest.permission.WRITE_EXTERNAL_STORAGE‘’,因为小伙伴们各自的项目中所使用的权限框架不同,所以库中再集成的话会显得非常臃肿多余。以下均以kotlin为示例,java的写法基本无差别,不在单独列出

以下选项根据需要选择性添加:val intent = LPhotoPickerActivity.IntentBuilder(this)

.maxChooseCount(3) //最大多选数目

.columnsNumber(4) //以几列显示图片

.imageType(LPPImageType.ofAll()) //需要显示的图片类型(webp/PNG/GIF/JPG)

.pauseOnScroll(false) //滑动时,是否需要暂停图片加载

.isSingleChoose(false) //单选模式

.imageEngine(LGlideEngine()) //添加自定义的图片加载引擎(库中已经自带Glide加载引擎,如果你不需要自定义,可不添加此句)

.theme(theme) //主题

.selectedPhotos(ArrayList()) //已选择的图片数组

.build()

startActivityForResult(intent, CHOOSE_PHOTO_REQUEST)

在activityonActivityResult中接收数据override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {        super.onActivityResult(requestCode, resultCode, data)        if (resultCode == RESULT_OK) {            when (requestCode) {

CHOOSE_PHOTO_REQUEST -> {                    val selectedPhotos = LPhotoPickerActivity.getSelectedPhotos(data)

}

}

}

自定义图片加载引擎框架

库中已经编写了Glide加载引擎,如果需要自定义其他图片加载框架的,可参照LGlideEngine自己重写。

继承LImageEngine接口,重写其中的方法即可(以Glide为例子):class LGlideEngine : LImageEngine {

private val glideOptions by lazy { RequestOptions().centerCrop() }    override fun load(context: Context, imageView: ImageView, path: String?, @DrawableRes placeholderRes: Int, resizeX: Int, resizeY: Int) {

Glide.with(context)

.load(path)

.apply(glideOptions.placeholder(placeholderRes).override(resizeX, resizeY))

.into(imageView)

}    //pauseOnScroll打开时,以下两个必须写,否"滑动时暂停加载"不会生效

//加载暂停

override fun pause(context: Context) {

Glide.with(context).pauseRequests()

}    //恢复加载

override fun resume(context: Context) {

Glide.with(context).resumeRequestsRecursive()

}

}

更改主题

简单设置,仅需一次性固定设置的

在style文中重写以下内容即可(style名字必须为LPhotoTheme):

56dp

@drawable/ic_l_pp_back_android

16sp

50dp

@color/colorPrimary

@color/colorPrimary

#F9F9F9

#f2f2f2

#96ffffff

#333333

#acacac

2dp

#fff

100

#fa5d5d

2dp

2dp

动态设置主题,需要多种风格切换的(例如主题切换的情况)

同上先在xm中定义属性,但style名字可以随意:

……

属性内容同上一样

在代码中调用theme()方法设置xml主题:LPhotoPickerActivity.IntentBuilder(this)

……    .theme(R.style.MyDarkTheme)    .build()

混淆

本库所有内容,除Glide外,均可以混淆,已经过测试。

添加如下Glide混淆规则即可:(如果自定义了其他图片加载库,请自行添加混淆内容即可)#glide 4.x-keep class com.bumptech.glide.Glide { *; }

-keep public class * implements com.bumptech.glide.module.GlideModule-keep public class * extends com.bumptech.glide.module.AppGlideModule-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {

**[] $VALUES;

public *;

}

附录:配合使用uCrop

先添加uCrop库,

然后在onActivityResult中接收数据后,传递给uCrop即可override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {        super.onActivityResult(requestCode, resultCode, data)        if (resultCode == RESULT_OK) {            when (requestCode) {

CHOOSE_PHOTO_REQUEST -> {                    val selectedPhotos = LPhotoPickerActivity.getSelectedPhotos(data)                    if(selectedPhotos.size == 1) {                        //使用UCrop裁剪图片

val outUri = Uri.fromFile(File(cacheDir, "${System.currentTimeMillis()}.jpg"))

UCrop.of(Uri.fromFile(File(selectedPhotos[0])), outUri)

.withAspectRatio(1f, 1f)

.withMaxResultSize(800, 800)

.start(this)

}

}

//接收uCrop的参数

UCrop.REQUEST_CROP   -> {                    data?.let {                        val resultUri = UCrop.getOutput(data)

Log.d("UCrop.REQUEST_CROP", resultUri.toString())

Glide.with(this).load(resultUri).into(imgView)

}

}

}

}

使用步骤很简单,具体的使用都可以参照demo MainActivity

License2018 limuyang

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions andlimitations under the License.

作者:limuyang2

链接:https://www.jianshu.com/p/4bb108e87974

android photopicker怎么修改状态栏,一个非常好看的图片选择框架LPhotoPicker,确定不来看看么...相关推荐

  1. android photopicker怎么修改状态栏,有没有办法阻止UIImagePickerController更改状态栏样式?...

    Matej Bukovi.. 39 我希望状态栏保持黑色不透明,同时显示照片库选择器(照片选择器将其更改为黑色半透明),这解决了我的问题. 设置UIImagePickerDelegate: libra ...

  2. android开发方向知乎,Android开发者必看:知乎开源的图片选择库

    前言 在实际开发中,图片选择器一直都是必不可少的一个部分,不管是 QQ 头像的设置,还是发送一条装逼的微信朋友圈,都要用到图片选择器来给用户选择他们想要上传的图片,最近知乎开源了一款图片选择库 Mat ...

  3. Android图片选择框架

    1.今天做开发,需要一个相册多选功能,然后就上网查了一下,看了有一个jar包,可以直接引用,就直接调用了, com.yanzhenjie:album:1.0.0 本来想直接写一个左右循环移动的方法,但 ...

  4. android微信图片选择框架,Android仿微信图片选择器ImageSelector使用详解

    今天给大家介绍一个仿微信的图片选择器:ImageSelector.ImageSelector支持图片的单选.限数量的多选和不限数量的多选.支持图片预览和图片文件夹的切换.在上一篇文章 <Andr ...

  5. android选择图片或拍照开源项目,Android 开源照相和图片选择框架PictureSelector

    拍照或者相册选择图片并渲染到UI上,发现了一个更简单的三方框架来实现 -- PictureSelector.Github地址:https://github.com/LuckSiege/PictureS ...

  6. Android 图片选择框架ImageSelector适配Android10及以上

    参考地址: 1.引入依赖 在Project的build.gradle在添加以下代码 allprojects {repositories {...maven { url 'https://jitpack ...

  7. android仿喜马拉雅APP状态栏,一个模仿企鹅 FM 界面的 Android 应用—喜马拉雅Kotlin。完全使用 Kotlin 开发。...

    XimalayaKotlin 一个模仿企鹅 FM 界面的Android 应用-喜马拉雅Kotlin.完全使用 Kotlin 开发.有声资源和播放器由喜马拉雅 SDK 提供. 主要功能: - 在线播放专 ...

  8. android好用拍照框架,Github挺好用的android图片选择框架(拍照+从相册)

    项目要用到多图片上传选择和展示的功能,在github找到了个效果看起来不错的demo,悲剧的是下载完zip后浏览器卡死了,没记住地址,如有侵权请联系... 话不多少,先看效果: 这个库叫做 Photo ...

  9. Github挺好用的android图片选择框架(拍照+从相册)

    项目要用到多图片上传选择和展示的功能,在github找到了个效果看起来不错的demo,悲剧的是下载完zip后浏览器卡死了,没记住地址,如有侵权请联系... 话不多少,先看效果: 这个库叫做 Photo ...

  10. 混合开发Android FlutterActivity 的透明状态栏

    前言 我们知道,在纯flutter 的项目中,设置透明状态栏只需要在flutter 的入口处添加下面这段代码就可以, if (Platform.isAndroid) {//设置Android头部的导航 ...

最新文章

  1. Struts2 2.5版本新配置filter-class
  2. node.js学习笔记之promise
  3. 组件php53 php55区别,PHP53、54、55、56各版本重要更新简述(上)
  4. KERAS中fit方法中verbose参数详细解释
  5. 如何实践AI深度学习的十大惊艳案例
  6. 音视频处理中的硬压缩与软压缩
  7. oracle按空格拆分列,DB2字符串按照指定符号进行拆分成多个字段的实现方式
  8. Linq、Lambda表达式详细总结(转)
  9. tar 相关知识软硬连接
  10. LSMW批处理使用方法(01)_总述及界面说明
  11. 微软:明明修复了Bug,你们还把我骂上热搜?
  12. Python 案例001 (有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数)...
  13. Union-Find 并查集算法详解
  14. 漫步凸分析七——凸函数闭包
  15. spearman相关性分析_「同学交大经金考研」西安交通大学432统计学-必考简答题4:spearman等级相关系数...
  16. 【Level 08】U07 Mixed Feelings L2 Let's go shopping
  17. stm32捕获占空比_「话说定时器系列」之六:STM32定时器输入捕获话题
  18. 互联网大数据对教育的重要性
  19. WiFi Explorer Mac版WiFi管理器常见问题解答
  20. android在副屏中运行一个应用_android一个app打开另一个app的指定页面

热门文章

  1. 死磕单点登录的实现原理....
  2. 昨晚我把900W+数据,从17s优化到300ms
  3. JVM 大厂面试都会问,都会这么问,你能顶住么?
  4. 80%的程序员不了解的微服务内幕
  5. 即插即用,运维工程师必会正则表达式大全
  6. [翻译 EF Core in Action 1.9] 掀开EF Core的引擎盖看看EF Core内部是如何工作的
  7. centos操作---搭建环境 安装python
  8. angularjs ng-include
  9. RQNOJ 95 多多看DVD(加强版):01背包
  10. C#编程(八十)---------- 异常类