前言

在安卓开发中经常用到修改头像功能,通常就拍照和选择相册图片两种。有很多时候还需要对图片进行裁剪。所以这个工具可以更快速完成这些功能。对于6.0权限的处理,每个人用的都不一样,所以这个工具使用的是纯原生的方法,使用时已经对权限进行了处理。当然也可以在使用前使用自己喜欢的方法处理动态权限。对 7.0 的FileProvider用了鸿阳大神的库,FitAndroid7,库很小,使用简单,一行代码完成Android 7 FileProvider适配~。

使用

导入

implementation 'com.github.KiWiLss.PopupUtils:ximageselect:1.0.7'

2,在界面中初始化,第二个参数代表是否裁剪图片

mXImgSelect = new XImgSelect(this, false, new XImgSelectCallback() {

@Override

public void noCamerPermission(boolean isShow) {//没有权限的监听

if (isShow){

Toast.makeText(CameraTestActivity.this, "请设置权限", Toast.LENGTH_SHORT).show();

}else {//点了不再询问,可用做成进入设置权限

Toast.makeText(CameraTestActivity.this, "在设置中授予权限", Toast.LENGTH_SHORT).show();

}

}

@Override

public void getPicPath(String path) {//结果的监听

Log.e(TAG, "getPicPath: "+path);

Bitmap bitmap = BitmapFactory.decodeFile(path);

mIvPic.setImageBitmap(bitmap);

//BitmapUtils.saveBpImageToGallery(CameraTestActivity.this,bitmap);

}

});

权限处理

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

mXImgSelect.onRequestPermissionsResult(requestCode,permissions,grantResults);

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

}

调用onActivityResult()才能获取结果

@Override

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

super.onActivityResult(requestCode, resultCode, data);

//如果裁剪图片,在获取结果前设置图片尺寸

//mXImgSelect.setClipSize(300,300);

mXImgSelect.onActivityResult(requestCode,resultCode,data);

Log.e("MMM", "onActivityResult: "+ requestCode+"--"+data);

//mIvPic.setImageURI(mXImgSelect.uriClipUri);

}

BitmapUtils

这个工具类里有一些常用的对 bitmap 处理的方法。

compressSize :压缩图片尺寸

compressBitmap :图片质量压缩

zoomImage :图片缩放

getBitmapFromDrawable :drawable转bitmap

bitmapTodrawable :bitmapTodrawable

getByteFromBitmap :bitamp -> byte[]

getBitmapFromByte :byte[] -> bitmap

createBitmapThumbnail

getBitmapByUri :Uri -> bitmap

saveBpImageToGallery :保存bitmap到本地

github 地址

相册多选的情况

有时除了选择头像一张图片,还会有选择多张图片的情况。这里推荐一个仿知乎的第三方库。Matisse,这个库也很简单好用,需要自己处理 6.0 权限申请,效果如下:

image

拍照的实现

mMediaStoreCompat = new MediaStoreCompat(this);

mMediaStoreCompat.setCaptureStrategy(new CaptureStrategy(true,

getPackageName() + ".android7.fileprovider","test"));

mMediaStoreCompat.dispatchCaptureIntent(this,199);

结果处理:onActivityResult中

Uri contentUri = mMediaStoreCompat.getCurrentPhotoUri();

String path = mMediaStoreCompat.getCurrentPhotoPath();

选择相册

Matisse.from(this)

.choose(MimeType.ofAll())

.countable(true)

.capture(true)

.captureStrategy(new CaptureStrategy

(true, getPackageName()+".android7.fileprovider",

"test"))

.maxSelectable(9)

.addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))

.gridExpectedSize(

getResources().getDimensionPixelSize(R.dimen.grid_expected_size))

.restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

.thumbnailScale(0.85f)

// .imageEngine(new GlideEngine()) // for glide-V3

.imageEngine(new Glide4Engine()) // for glide-V4

.setOnSelectedListener(new OnSelectedListener() {

@Override

public void onSelected(

@NonNull List uriList, @NonNull List pathList) {

// DO SOMETHING IMMEDIATELY HERE

Log.e("onSelected", "onSelected: pathList=" + pathList);

}

})

.originalEnable(true)

.maxOriginalSize(10)

.autoHideToolbarOnSingleTap(true)

.setOnCheckedListener(new OnCheckedListener() {

@Override

public void onCheck(boolean isChecked) {

// DO SOMETHING IMMEDIATELY HERE

Log.e("isChecked", "onCheck: isChecked=" + isChecked);

}

})

.forResult(22);

结果处理:

@Override

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 22){

assert data != null;

//boolean b = Matisse.obtainOriginalState(data);

List list = Matisse.obtainPathResult(data);

Log.e("MMM ", list.get(0));

}

}

在选择图片时也可以拍照,如果不想要拍照,可用通过 .capture(true)设置。详情可参考Matisse.

android壁纸选择器,Android 图片选择器相关推荐

  1. android qq底部图片选择器,Android 高仿QQ图片选择器

    当做一款APP,需要选择本地图片时,首先考虑的无疑是系统相册,但是Android手机五花八门,再者手机像素的提升,大图无法返回等异常因数,导致适配机型比较困难,微信.QQ都相继的在自己的APP里集成了 ...

  2. Android 超高仿微信图片选择器 图片该这么加载

    2019独角兽企业重金招聘Python工程师标准>>> 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39943 ...

  3. Android 超高仿微信图片选择器

    出处: http://blog.csdn.net/lmj623565791/article/details/39943731 1.概述 关于手机图片加载器,在当今像素随随便便破千万的时代,一张图片占据 ...

  4. android 微信图片选择,Android实现微信的图片选择器

    现在大部分的App都上传图片的功能,比如设置用户头像.聊天发送图片.发表动态.论坛帖子等.上传图片需要先从选择手机中选择要上传的图片,所以图片选择器在App中是很常见的组件,一般的手机都会自带一个图片 ...

  5. Android 超高仿微信图片选择器 图片该这么加载

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自: [张鸿洋的博客] 1.概述 关于手机图片加载器,在当 ...

  6. android仿微信的图片选择器

    PictureSelector 项目地址: arvinljw/PictureSelector  简介:包含:多选.单选.拍照.预览.裁剪:兼容大图,兼容 7.0 更多: 作者    提 Bug    ...

  7. Android 高仿微信图片选择器

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自: [张鸿洋的博客] 1.概述 关于手机图片加载器,在当 ...

  8. Android 超高仿微信图片选择器 图片该这么载入

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自: [张鸿洋的博客] 1.概述 关于手机图片载入器,在当 ...

  9. android 壁纸服务,Android开发学习之WallPaper设置壁纸详细介绍与实例

    今天和大家分享的是关于在android中设置壁纸的方法,在android中设置壁纸的方法有三种,分别是: 1.使用wallpapermanager的setresource(int resourceid ...

  10. android 壁纸服务,Android视频壁纸的实现

    视频壁纸属于动态壁纸,所以视频壁纸就可以用Android系统提供的动态壁纸服务来实现.首先先介绍一下在实现过程中会用到的几个类. WallpaperManager Android提供的用于管理壁纸的类 ...

最新文章

  1. 工信部 学习类app_工信部整治APP侵权行为,私自收集个人信息等8类问题被点名...
  2. ML-2 机器学习算法
  3. Android Bluetooth hci 命令分析
  4. Python实现switch效果
  5. 2019年, video captioning论文汇总
  6. ValueError: The QuerySet value for an exact lookup must be limited to one result using slicing.
  7. 果断收藏!六大主流大数据采集平台架构分析
  8. python plot方法的使用_Python bokeh.plotting.figure.step()用法及代码示例
  9. Linux下wps文档结构图,如何在Word中设置文档结构图
  10. 属于服务器端运行的程序_服务器端编程Java 引起人们的注意很大程度上始于 applet...
  11. scratch编程植物大战僵尸教程(一)
  12. win7取消计算机开机密码怎么设置,【win7】:当你想关闭开机密码的时候该怎么设置呢?...
  13. 2020新版小桔灯作文能力阶梯序列作文课件教案教材全套
  14. MBR20200CT-ASEMI肖特基二极管MBR20200CT
  15. 自媒体助手软件开发需具备哪些功能?
  16. 用python玩转数据作业答案_大学mooc2020年用Python玩转数据作业答案
  17. 服务器禁止访问文件,服务器文件夹访问权限设置 控制访问权限方法
  18. 北航信息与通信工程方向保研面试题集
  19. 样品制备丨艾美捷蛋白质羰基比色测定试剂盒方案
  20. js中的“|”运算符和“”运算符

热门文章

  1. OpenSAP Fiori Elements 公开课第四单元视频的中文字幕
  2. Angular Lazy load(延迟加载,惰性加载) 机制和 feature module 的学习笔记
  3. 关于SAP S/4HANA里ABAP源代码管理功能的增强
  4. 使用Angular rxjs打印鼠标点击事件的x坐标之和
  5. 让outlook邮件里默认不显示发送方的头像
  6. Scala Array sum recursive call
  7. 2015-03-19 Opportunity order by implementation detail
  8. Gateway internal_length debug with Sara Zhang
  9. 如何通过Fiori后台调试的方式找到gateway系统的ID
  10. UI5控件类似Java反射机制的一个小技巧