热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android仿微信图片选择器

这篇文章主要为大家详细介绍了Android仿微信图片选择器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

很多项目要用到图片选择控件,每次都要写一大堆逻辑。于是基于图片选择组件(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


看着这些属性是不是很熟悉,没错!它就是基础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中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在git中如何对指定的commit id打标签,并解决了忘记打标签的问题。通过查找历史提交的commit id,可以在任意时间点打上标签。同时,还介绍了git中的一些常用命令和操作。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
author-avatar
卡吉米国际早教_763
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有