仿微信图片选取、相机拍照—PhotoPicker(已集成GalleryView)
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)相关推荐
- Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传
仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 如果不知道如何上传 ...
- Kotlin 实战翻译 —— 仿微信图片选择开源库ImagePicker
2017.10.27补充 在用Kotlin写项目的时候由于不能使用生成成员变量的快捷键,导致我写findViewById浪费了好多时间,后来才发现Kotlin对Android有更好的支持,可以完全不用 ...
- Android 使用GridView+仿微信图片上传功能(附源代码)
由于工作要求最近在使用GridView完成图片的批量上传功能,我的例子当中包含仿微信图片上传.拍照.本地选择.相片裁剪等功能,如果有需要的朋友可以看一下,希望我的实际经验能对您有所帮助. 直接上图,下 ...
- Android开发之使用GridView+仿微信图片上传功能(附源代码)
前言:如果转载文章请声明转载自:https://i.cnblogs.com/EditPosts.aspx?postid=7419021 .另外针对有些网站转载本人的文章结果源码链接不对的问题,本人在 ...
- Android 仿微信图片选择器
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.自我介绍 这是我写的第一篇博客,首先做一下自我介绍,我去年刚毕业,大学学的是计算机专业,期间也学了一门Android相关课程,但是你懂的,一个 ...
- android仿微信图片上传进度,android高仿微信发布动态(选择图片)
[实例简介]Android 超高仿微信图片选择器 [实例截图] [核心代码] public class MainActivity extends Activity implements OnImage ...
- Android LruCache和DiskLruCache相结合打造图片加载框架(仿微信图片选择,照片墙)
LrcCache和DiskLruCache相结合打造图片加载框架 转载请标明出处:http://blog.csdn.net/luoshishou/article/details/51299169 源码 ...
- android 点击图片动画效果,Android仿微信图片点击全屏效果
废话不多说,先看下Android图片点击全屏效果: 先是微信的 再是模仿的 先说下实现原理,再一步步分析 这里总共有2个Activity一个就是主页,一个就是显示我们图片效果的页面,参数通过Inten ...
- 仿微信图片选择及多张图片上传
最近做项目涉及到图片上传这块,多张图片上传是用xutils实现的,图片选择.预览是参考了微信图片选择的demo,先上图: 这是网上参考了仿微信图片上传实现的,这里就不多讲了,文章底部有下载链接,下面介 ...
- android点击加号,Android仿微信图片上传带加号且超过最大数隐藏功能
1.仿照微信空间上传图片,显示图片数量以及超过最大,上传按钮隐藏功能 2.上效果图 3.上代码,主要是Adapter类 /** * Created by zhangyinlei on 2018/3/2 ...
最新文章
- linux系统支持游戏,3种方法让Linux系统支持游戏
- 网络营销外包期间如何提升网络营销外包外链优化效果?
- 怎么向tab control中加其它控件(如文本框等)
- MySql 数据操作类
- 安卓四大组件之二广播
- 排序算法Java代码实现(二)—— 冒泡排序
- gorm软删除_gorm 的预加载怎么才能关掉软删除-问答-阿里云开发者社区-阿里云
- ubuntu测量机器的温度
- Spring源码之bean的加载(三)从bean中获取对象
- nginx日志的监控【转】
- 计算机网络简历自我认识,计算机网络专业简历的自我评价
- 使用nvim来代替VSCode,神操作
- poj3259 Wormholes floyd求负环
- 工作流现状2008年
- vue实现结算淘宝购物车效果
- javaScript开源大全
- 谷歌插件——Vimium
- Mojibakes来自哪里? 编码要点
- HOJ 13108 Just Another Knapsack Problem (AC自动机+dp)
- Unity虚拟现实插件VRTK3.3使用教程一:基本配置
热门文章
- 【工具分享】AWVS 13 Linux版
- IntelliJ IDEA 设置主题背景
- Java编程练习题Demo71-Demo80
- cad批量页码lisp_源代码:批量改页码(加前缀)及提取属性块
- unity功能开发——好友系统
- 网易我的世界服务器如何装组件,【图文教程】我的世界中国版怎么添加使用光影|光影放在哪里|服务器光影如何安装...
- linux重定向文件容加时间,[单选] linux系统,把当前日期重定向到/tmp/date文件中,并不想覆盖原来的内容,下面正确的操作是()。...
- 同济大学 线性代数 第六版 pdf_线性代数同济第六版第五章课后习题答案!
- c语言中double占多少字节,double占几个字节?
- html生成一维码,一维码条形码生成工具