很多项目要用到图片选择控件,每次都要写一大堆逻辑。于是基于图片选择组件(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中初始化一下缓存路径,以后的压缩后的图片都缓存在这路径底下

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,不重写不会除非上面两个回调方法,所以就看不到有图片添加

@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 Image Edit Lib. Android 图片编辑库,微信图片编辑库

    Imaging 项目地址:minetsh/Imaging  简介: Android Image Edit Lib. Android 图片编辑库,微信图片编辑库 更多:作者   提 Bug 标签: 一款 ...

  2. Android 自带图标库 android.R.drawable

    在xml文件中调用. android:title="@string/secure_connect" android:orderInCategory="100" ...

  3. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )

    文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  4. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )

    文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  5. Android仿微信图片编辑库,你想要的功能这里都有

    最近项目需要,写了一个和微信中图片编辑功能类似的图片编辑库,除去问题操作上摈弃掉不方便的手势操作外,其余微信中的核心功能全部一致,保留了微信中涂鸦.马赛克.文字等随时随着图片缩放的功能,这点是我所找的 ...

  6. android 6.0权限库,Android 6.0动态权限适配

    前言 最近项目发现比较多的问题是关于Android 6.0的问题,APP安装之后,在Android 6.0之后的系统,点击直接奔溃打不开,这是为什么昵?这就是Android 6.0以上的系统引入运行时 ...

  7. android 沉浸式开源库,Android沉浸式状态栏

    关于Android沉浸式状态栏, 网上已经有很多开源库, 虽然开源库可以解决某些特定布局下的沉浸式状态栏问题, 但是遇到比较特殊的布局就无法解决了, 所以了解一下沉浸式状态栏如何实现是有必要的. 无论 ...

  8. android旋转动画开源库,android 围绕中心旋转动画

    本文主要介绍Android中如何使用rotate实现图片不停旋转的效果.Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果 ...

  9. android实现qq表情库,Android编程开发之EditText实现输入QQ表情图像的方法

    本文实例讲述了Android编程开发之EditText实现输入QQ表情图像的方法.分享给大家供大家参考,具体如下: 实现效果如下: 将QQ表情图像放到res下的drawable-hdpi文件夹下: 布 ...

最新文章

  1. cached过高导致内存溢出 java head space
  2. mysql grant 不想让用户看到 系统默认 mysql_MYSQL用户权限管理GRANT使用
  3. 怎么让修改的html持久化_redis持久化机制
  4. 【公众号系列】SAP的新零售
  5. JavaScript从入门到放弃 -(七)ES6
  6. arm中断保护和恢复_嵌入式ARM系统异常和中断处理知识总结
  7. Heart Rate Estimate
  8. Android开机启动Activity或者Service方法
  9. AStar寻路2-性能优化
  10. shell脚本编程之循环控制语句(continue/break/sleep)
  11. PTA|团体程序设计天梯赛-练习集|JAVA版
  12. DB9公头母头接口定义及连接
  13. 梦幻西游网页版服务器互通吗,梦幻西游网页版开服伙伴
  14. python捕捉kdj交易信号_KDJ指标详解:教你两种方式判断交易信号!
  15. 关于淘宝商品信息的爬虫
  16. module not specified如何解决
  17. Oracle 19c Grid Infrastructure安装
  18. Mysql数据库计算时间差(天,时,分,秒)
  19. 物联网无线通信模块的新选择
  20. 悟空(wukong)搜索引擎源代码阅读(待续)

热门文章

  1. 51Nod1740 蜂巢迷宫
  2. css实现图片旋转360°
  3. 大数据开发之Hive篇14-Hive归档(Archiving)
  4. javascript英语单词音节拆分_英语启蒙:自然拼读之单词合成与分割
  5. 深入boot.img格式文件结构解析
  6. html无法访问页面,为什么网页无法访问?
  7. 20201114-三轴云台storm32 BGC HAKRC调试+
  8. 由浅入深!大牛耗时一年最佳总结,让你的app体验更丝滑!3面直接拿到offer
  9. Sicily 1031. Campus
  10. Alpha版本——展示博客【第二组】