Background

最近在开发中遇到图片选取的需求,要求从相册和相机拍照选取图片,这可以说是非常常规的需求了,在我等待UE出图的过程中,产品走到我身边,默默的打开了微信,露出蜜汁微笑。“这次咱们就不出图了,就按照微信这个来就行了,有好的、成熟的产品就要借鉴嘛”,然后潇洒离去...

我还能说什么,我也打开了微信,平时在使用的过程中,确实没有特别在意微信的这个功能,但当自己要开发的时候,就发现,微信之所以有这么大的用户量,对于细节的追求确实特别细腻,只是我们在平时使用过程中并不会在意,因为它的设计都合理且完美。话不多说先上图。

Tips

其实在准备做任何东西之前,我都会先思考一下整体需要哪方面的技术点,然后再考虑各个技术的可行性。再做这个东西之前,我也是仔仔细细、认认真真的观察了微信的图片选取的整个流程,并且给它的一些细节之处也实现了。可以说,在整体上有90%与原型相似吧。至于抄袭人家产品...嗯..."有好的、成熟的产品就要借鉴嘛"。

1 本地图片的获取

首先我们要知道,手机上的图片都是存储在数据库里的,Android系统对外提供了查询方法,供我们去查询存储在数据库中的图片

public static final Cursor query(ContentResolver cr, Uri uri, String[] projection, String selection, String[] selectionArgs, String orderBy) {
}
复制代码

然后我们操作cursor就可以取出我们想要的图片了,存储在我们自定义的model里供使用。

2 从底部弹出的目录选择view实现

其实最开始是想利用BottomSheetDialog这个Material design控件来实现了,但是最后发现并不能完美实现现微信这个效果,并且在自己使用的过程中,和通过一些blog的博主介绍,发现这个控件还是有一些问题的,所以,为了节约开发成本,控制风险。我将这个view封装成了一个单独的控件,最后通过动画来实现弹出、回缩的效果。(以后有时间,要用新控件再试一下)

3 全屏预览(清除状态栏)

因为完全仿照微信来做,所以这个效果也是必须要有的。当单击图片时,会将状态栏和缩略图预览这些东西都隐藏。这里主要放一下关于状态栏相关的东西。
(1)首先将预览的Activity的theme设置成NoActionBar的。
(2)在oncreate()方法中设置全屏。 应在setContentView()方法之前。

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
复制代码

单击时展示、隐藏状态栏的方法

private void hideStatusBar(Window window){window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
复制代码
private void showStatusBar(Window window){window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
}
复制代码

4 android 7.0 + 相机拍照FileUriExposedException

因为7.0以上的系统不能直接拿到文件的地址了,要通过Uri来转换。出现这个问题也非常容易解决,自定义一个Provider去获取文件的Uri,这个解决方案一找一大堆,我就不多说了,就是提醒一下。

How to use

(1)相册选取图片

                PhotoPicker.getPhotoPicker().setPhotoSpanCount(4).setMaxPhotoCounts(9).setGetPhotoPickerCallBack(new PhotoPicker.OnGetPhotoPickerCallBack() {@Overridepublic void onGetPhotoPickerSuccess(List<PhotoInfo> photoList) {}@Overridepublic void onGetPhotoPickerFail() {}}).startSelectPhoto(MainActivity.this);
复制代码

(2)相机拍摄图片

                PhotoPicker.getPhotoPicker().setGetPhotoPickerCallBack(new PhotoPicker.OnGetPhotoPickerCallBack() {@Overridepublic void onGetPhotoPickerSuccess(List<PhotoInfo> photoList) {}@Overridepublic void onGetPhotoPickerFail() {}}).startTakePhoto(MainActivity.this);
复制代码

1 获取PhotoPicker实例

PhotoPicker.getPhotoPicker()
复制代码

2 参数设置

setMaxPhotoCounts:限制图片选取的张数(默认为9)。
setThemeColor: 设置主题色(默认ff6c00)(按钮的颜色,勾选为图片,并不生效)
setPhotoSpanCount:图片在集体浏览时的列数(默认4列)
setIsPhotoPreviewWithCamera:设置是否把拍照功能放在图片预览的第一个展示,也可单独调用(默认不展示)
setIsMutilSelectType: 设置是否为单选模式(默认多选) setGetPhotoPickerCallBack:获取图片的回调

3 启动方法

startSelectPhoto(Context context);可以在启动之前设置各种参数。
startTakePhoto(Context context);不用设置各种参数,直接开启摄像头。

Final

这个PhotoPicker目前只经过我的一下简单测试,可能还会有一些问题,如果在使用过程发现问题,我也会及时修复,以后也会渐渐的丰富这个库的功能,希望能让它成为一个图片处理的一个公共库。如果有感兴趣的小伙伴,请移步到我的gayhub,或扫码下载apk

好心人顺便Star一下,小弟不胜感激,抱拳了,溜了~~~

仿微信图片选取、相机拍照—PhotoPicker(已集成GalleryView)相关推荐

  1. Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传

    仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 如果不知道如何上传 ...

  2. Kotlin 实战翻译 —— 仿微信图片选择开源库ImagePicker

    2017.10.27补充 在用Kotlin写项目的时候由于不能使用生成成员变量的快捷键,导致我写findViewById浪费了好多时间,后来才发现Kotlin对Android有更好的支持,可以完全不用 ...

  3. Android 使用GridView+仿微信图片上传功能(附源代码)

    由于工作要求最近在使用GridView完成图片的批量上传功能,我的例子当中包含仿微信图片上传.拍照.本地选择.相片裁剪等功能,如果有需要的朋友可以看一下,希望我的实际经验能对您有所帮助. 直接上图,下 ...

  4. Android开发之使用GridView+仿微信图片上传功能(附源代码)

    前言:如果转载文章请声明转载自:https://i.cnblogs.com/EditPosts.aspx?postid=7419021  .另外针对有些网站转载本人的文章结果源码链接不对的问题,本人在 ...

  5. Android 仿微信图片选择器

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1.自我介绍 这是我写的第一篇博客,首先做一下自我介绍,我去年刚毕业,大学学的是计算机专业,期间也学了一门Android相关课程,但是你懂的,一个 ...

  6. android仿微信图片上传进度,android高仿微信发布动态(选择图片)

    [实例简介]Android 超高仿微信图片选择器 [实例截图] [核心代码] public class MainActivity extends Activity implements OnImage ...

  7. Android LruCache和DiskLruCache相结合打造图片加载框架(仿微信图片选择,照片墙)

    LrcCache和DiskLruCache相结合打造图片加载框架 转载请标明出处:http://blog.csdn.net/luoshishou/article/details/51299169 源码 ...

  8. android 点击图片动画效果,Android仿微信图片点击全屏效果

    废话不多说,先看下Android图片点击全屏效果: 先是微信的 再是模仿的 先说下实现原理,再一步步分析 这里总共有2个Activity一个就是主页,一个就是显示我们图片效果的页面,参数通过Inten ...

  9. 仿微信图片选择及多张图片上传

    最近做项目涉及到图片上传这块,多张图片上传是用xutils实现的,图片选择.预览是参考了微信图片选择的demo,先上图: 这是网上参考了仿微信图片上传实现的,这里就不多讲了,文章底部有下载链接,下面介 ...

  10. android点击加号,Android仿微信图片上传带加号且超过最大数隐藏功能

    1.仿照微信空间上传图片,显示图片数量以及超过最大,上传按钮隐藏功能 2.上效果图 3.上代码,主要是Adapter类 /** * Created by zhangyinlei on 2018/3/2 ...

最新文章

  1. linux系统支持游戏,3种方法让Linux系统支持游戏
  2. 网络营销外包期间如何提升网络营销外包外链优化效果?
  3. 怎么向tab control中加其它控件(如文本框等)
  4. MySql 数据操作类
  5. 安卓四大组件之二广播
  6. 排序算法Java代码实现(二)—— 冒泡排序
  7. gorm软删除_gorm 的预加载怎么才能关掉软删除-问答-阿里云开发者社区-阿里云
  8. ubuntu测量机器的温度
  9. Spring源码之bean的加载(三)从bean中获取对象
  10. nginx日志的监控【转】
  11. 计算机网络简历自我认识,计算机网络专业简历的自我评价
  12. 使用nvim来代替VSCode,神操作
  13. poj3259 Wormholes floyd求负环
  14. 工作流现状2008年
  15. vue实现结算淘宝购物车效果
  16. javaScript开源大全
  17. 谷歌插件——Vimium
  18. Mojibakes来自哪里? 编码要点
  19. HOJ 13108 Just Another Knapsack Problem (AC自动机+dp)
  20. Unity虚拟现实插件VRTK3.3使用教程一:基本配置

热门文章

  1. 【工具分享】AWVS 13 Linux版
  2. IntelliJ IDEA 设置主题背景
  3. Java编程练习题Demo71-Demo80
  4. cad批量页码lisp_源代码:批量改页码(加前缀)及提取属性块
  5. unity功能开发——好友系统
  6. 网易我的世界服务器如何装组件,【图文教程】我的世界中国版怎么添加使用光影|光影放在哪里|服务器光影如何安装...
  7. linux重定向文件容加时间,[单选] linux系统,把当前日期重定向到/tmp/date文件中,并不想覆盖原来的内容,下面正确的操作是()。...
  8. 同济大学 线性代数 第六版 pdf_线性代数同济第六版第五章课后习题答案!
  9. c语言中double占多少字节,double占几个字节?
  10. html生成一维码,一维码条形码生成工具