很多项目要用到图片选择控件,每次都要写一大堆逻辑。于是基于图片选择组件(PhotoPicker)封装了一个控件PhotoUploadView。方便简易,一键集成,几句代码就可以添加类似微信的图片选择控件了。下面介绍一下该控件有些什么特点以及怎么使用。先看图:

效果如上图,点击加号弹出选择框,目前提供了两种形式,一个如图所见的PopupWindow,另一个是MaterialDialog,选择拍照或者从图库获取,从图库获取后就进入图二,选择完之后就图三或图四这里因为很多项目需要不一样,所以特别封装了:图三的情况:上传成功之后进度提示隐藏和失败重发提示隐藏,或者是批量上传不需要进度提示的和失败重发的。图四的情况:选择完后遍历上传,有可能出现某一张上传失败。点击图中的重发按钮触发重发的事件当然如果你觉得删除和重发的icon难看,完全可以自己取代替换它,删除的图标叫icon_photo_view_cancel,重发的图标叫icon_photo_view_resend,只需要按照这个命名,然后放在自己项目底下的mipmap包,控件会自动替换,不需要去set什么。

先说依赖,可以在你项目的build.gradle添加依赖compile 'com.github.BmobSnail:PhotoUploadView:1.0.0'

又或者在我的github下载库下来再导入。然后在你的布局用使用改控件,PictureUploadView

android:id="@+id/pictureUploadView"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="@dimen/partition_normal"

android:horizontalSpacing="2dp"

android:numColumns="3"

android:scrollbars="none"

android:verticalSpacing="1dp" />```

看着这些属性是不是很熟悉,没错!它就是基础GridView的,所以完全可以当作GridView,GridView有的它也有,简单易懂了吧。添加完这一步你就可以在布局看到图一那样有个加号的控件了。然后就是写代码的节奏了。控件可以选择设置选择原图路径还是压缩后的路径,因此就有了设置缓存路径这一步在你的application中初始化一下缓存路径,以后的压缩后的图片都缓存在这路径底下

```java

String cache = StorageUtils.getOwnCacheDirectory(this, "Upload/photo").getAbsolutePath();

PictureLibrary.init(this, cache + "/");

紧接着就是使用了,控件执行初始化init,之所以还要一次这样初始化步骤是有项目需求是要编辑已发送成功的带图片的帖子,那些图也要显示在选择图片控件上,所以有第五个参数,获取到图片数据的集合后传进去,就能显示那些网络的图片,这时候可以删除添加像普通那样使用了。setShowMethod是使用那种风格显示弹框

mPictureUploadView = (PictureUploadView) findViewById(R.id.pictureUploadView);

//第一个参数上下文

//第二个参数有CHAT(返回原图路径),UPLOAD(返回压缩路径)

//第三个参数选择个数//第四个参数默认为true(可不填),false为不显示上传进度

//第五个参数默认为数据集合List(可不填)

mPictureUploadView.init(this, UploadPicHelper.UPLOAD, 3, true);

mPictureUploadView.setShowMethod(PictureUploadView.POPUPWINDOW);//POPUPWINDOW,DIALOGmPictureUploadView.setUploadCallBack(this);

设置一下回调方法并实现PictureUploadView.UploadCallBack并重写两个方法,添加的回调和删除的回调,mUploadMap为上传成功之后保存成功的hashMap,mLocalMap为本地记录添加和删除的hashMap,之后的上传成功和上传失败要根据这个map的tag来决定哪个图片的重发按钮该显示还是隐藏的。

private Map mUploadMap, mLocalMap;

//添加图片

@Override

public void onAddCallback(String path, String tag) {

mLocalMap.put(tag, path);

//upload(path, tag);

}

//删除图片

@Override

public void onRemoveCallback(String tag) {

mUploadMap.remove(tag);

mLocalMap.remove(tag);

}```

最后再重写一下这个onActivityResult,不重写不会除非上面两个回调方法,所以就看不到有图片添加

```java

@Override

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

if (resultCode == RESULT_OK) {

mPictureUploadView.setResult(requestCode, resultCode, data);

}

super.onActivityResult(requestCode, resultCode, data);

}```

只需要上面这几步就可以实现像微信的那个图片选择控件一样了,其它上传回调的处理参考github里面的demo,有兴趣的朋友可以试试,欢迎大家指正

android 仿微信选取相册_Android类似微信图片选择器相关推荐

  1. android 仿微信选取相册_Android模仿微信选择图片

    前言 最近公司需要做一个类似微信那种选择头像和上传图片的功能,本想上github上找的,后来想了想,还是自己做一个,不仅方便以后用(毕竟自己写的修改起来也比较方便),还可以学到一些知识,废话少说,先看 ...

  2. android 仿微信选取相册_Android 实现一个仿微信的图片选择器

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

  3. android 仿微信选取相册_Android 仿微信 相册多图选择器

    下载方式 com.sh.zsh.code shphotoselectorlibrary 2.0.9 pom or Gradle: compile 'com.sh.zsh.code:shphotosel ...

  4. android仿华为系统相册之智能相册开发

    一.开发内容简介 最近课程要求仿照华为系统相册做一个android相册客户端,我称之为智能相册(智能是指其使用了机器学习的人脸识别.人脸检测和分类算法).本着反正实验报告写了也是写了的心态,还有自己在 ...

  5. 微信小程序自定义类似微信联系人组件

    微信小程序自定义联系人弹窗 在小程序项目中需要有一个选择人员项,想着看着好看一些,所以做成类似微信联系人的界面,由于本人是后端人员,效果不是特别好看,ui使用的是weui 效果图如下: 使用的是小程序 ...

  6. android 仿相册,Android 仿新浪相册选择器 PhotoSelector

    软件介绍 仿新浪相册选择器,支持相册选择.视频选择 一.使用方法 1.选择相册.支持拍照 启动PhotoSelectorActivity并传入已选照片路径List.若包含已选照片路径则被选照片会被选I ...

  7. Android拍照与选择相册照片后裁剪图片,相册多出副本问题

    最近做的一个需求,简单的实现上传头像,包含拍照以及选择照片. 但客户要求的是,需要裁剪. 正常实现需求后,回报问题说,每次选择相册中的照片并裁剪后,相册都有出现多一张裁剪后的照片. 看了代码,由于An ...

  8. android 仿微信选取相册_Android--选择图片(仿微信发朋友圈)第一篇

    这篇博客主要写仿微信朋友圈选择图片发朋友圈.整个功能包括加载图片,显示图片.相册文件夹.预览图片,九宫格显示已经选择好的图片等等,大概会有三篇博客. 效果图 看上面的图,加载图片肯定是异步加载,耗时任 ...

  9. android仿抖音上下切换视频,微信小程序仿抖音视频之整屏上下切换功能的实现代码...

    Page({ /** * 页面的初始数据 */ data: { video_list:[ {video_src:}, {video_src:}, {video_src:}, {video_src:}, ...

最新文章

  1. Mac上PDF中插入替换删除页面
  2. 面试必会系列 - 1.1 Java SE 基础
  3. java 并发 同步信号_Java并发教程–信号量
  4. EditText焦点问题
  5. 信息学奥赛一本通(1182:合影效果)——归并排序
  6. [转载]傅里叶分析之掐死教程(完整版)更新于2014.06.06 - 与时间无关的故事 - 知乎专栏...
  7. java安装的时候无效参数,spring-boot 打成jar把后 启动时指定参数无效
  8. 【泛函分析】 1 距离空间
  9. 闲人闲谈ERP项目逸事——德国做SAP项目回忆
  10. win7文件服务器代码,win7搭建文件服务器
  11. 一份网站的商业计划书内容概要
  12. 未来十年: 机器编程会取代程序员吗?
  13. 与器材无关 简单几步解决单反出片灰蒙蒙问题
  14. cos三次方积分_cosx的四次方如何积分?
  15. canvas 画一条波浪线 进度条
  16. 期待重磅升级的梅李大梦想城亲子游乐园!第三代黄桥大梦想城先让你一饱眼福!
  17. Zabbix 4.4 web前端界面操作流程:创建主机>创建触发器>报警媒介>动作>邮件 发送/接收 预警信息 等详细操作
  18. thinksnsv4.6运行php,SNS社交系统“ThinkSNS V4.6”活动应用功能详解及应用场景举例...
  19. 虚拟地址 虚拟内存 物理地址
  20. vscode远程开发基础教程

热门文章

  1. 核心单词Word List 9
  2. 2.1 电子计算机的兴起
  3. 深度学习知识点总结-激活函数
  4. [技巧]Ubuntu与Windows10局域网共享文件夹
  5. android字体加横线
  6. 【python】OpenCV—Brightness and Contrast adjustments
  7. 中文转自定义英文存储
  8. 《软技能—代码之外的生存指南》读书笔记之二:自我营销
  9. 迷惑新手的IOS开发问题
  10. java sequencer_java sequencer播放列表