Android开发之高仿微信图片选择器
<div><div>
<p>记得刚开始做Andriod项目那会,经常会碰到一些上传图片的功能需求,特别是社交类的app,比如用户头像,说说配图,商品配图等功能都需要让我们到系统相册去选取图片,但官方却没有提供可以选取多张图片的相关API,所以那时候会到Github上去找找相关的开源库,也觉得挺方便的,但随着后来Android系统的更新,带来了很多新特性和API的改变,比如从Android6.0后的动态权限申请,7.0的私有目录权限以及一些API的废弃(Uri.fromFile等),但所用的开源库作者又没有很及时的去更新适配,又或者一些开源库直接在库中引入了图片加载框架,导致项目中存在多个图片加载框架,这样就造成了包体积的增大和方法数的增加,导致项目中或多或少会出现一些问题,所以那时萌生了想自己写一个图片选择器,尽可能的做到简洁,速度快,然后一个图片选择器的库就这么诞生了:ImagePicker图片加载器</p>
<h3>实现效果图:</h3>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="306" data-height="636"><img src="//upload-images.jianshu.io/upload_images/2189443-52833f62e70ca1f6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/306/format/webp"></div>
</div>
<div class="image-caption">效果图1</div>
</div>
<br>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="306" data-height="637"><img src="//upload-images.jianshu.io/upload_images/2189443-655e1c356e0f955e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/306/format/webp"></div>
</div>
<div class="image-caption">效果图2</div>
</div>
<br>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="308" data-height="641"><img src="//upload-images.jianshu.io/upload_images/2189443-cb4dad72c803017f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/308/format/webp"></div>
</div>
<div class="image-caption">效果图3</div>
</div>
<br>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="304" data-height="632"><img src="//upload-images.jianshu.io/upload_images/2189443-1da4a1e21fab2e98.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/304/format/webp"></div>
</div>
<div class="image-caption">效果图4</div>
</div>
<p>相比1.0.+版本,2.0版本进行了代码的大块重构,注重模块间的代码解耦,简化了配置,将兼容Android7.0所需要的FileProvider下沉到库中完成,不再需要开发者配置,并对GIF图,视频,大图预览等功能有了支持。</p>
<p>1、如何在项目中引入该图片加载库:</p>
<pre class="hljs java"><code class="java"><span class="hljs-comment">//gradle版本在3.0以下引入此行
compile <span class="hljs-string">'com.lcw.library:imagepicker:2.1.2'
<span class="hljs-comment">//gradle版本在3.0以上引入此行
implementation <span class="hljs-string">'com.lcw.library:imagepicker:2.1.2'
</span></span></span></span></code></pre>
<p>2、一行代码调用:</p>
<pre class="hljs cpp"><code class="cpp"> ImagePicker.getInstance()
.setTitle(<span class="hljs-string">"标题")<span class="hljs-comment">//设置标题
.showCamera(<span class="hljs-literal">true)<span class="hljs-comment">//设置是否显示拍照按钮
.showImage(<span class="hljs-literal">true)<span class="hljs-comment">//设置是否展示图片
.showVideo(<span class="hljs-literal">true)<span class="hljs-comment">//设置是否展示视频
.setMaxCount(<span class="hljs-number">9)<span class="hljs-comment">//设置最大选择图片数目(默认为1,单选)
.setImagePaths(mImageList)<span class="hljs-comment">//保存上一次选择图片的状态,如果不需要可以忽略
.setImageLoader(<span class="hljs-keyword">new GlideLoader())<span class="hljs-comment">//设置自定义图片加载器
.start(MainActivity.<span class="hljs-keyword">this, REQUEST_SELECT_IMAGES_CODE);<span class="hljs-comment">//REQEST_SELECT_IMAGES_CODE为Intent调用的requestCode
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>3、如何获取选中的图片集合:</p>
<pre class="hljs java"><code class="java"> <span class="hljs-meta">@Override
<span class="hljs-function"><span class="hljs-keyword">protected <span class="hljs-keyword">void <span class="hljs-title">onActivityResult<span class="hljs-params">(<span class="hljs-keyword">int requestCode, <span class="hljs-keyword">int resultCode, Intent data) {
<span class="hljs-keyword">if (requestCode == REQUEST_SELECT_IMAGES_CODE && resultCode == RESULT_OK) {
List<String> imagePaths = data.getStringArrayListExtra(ImagePicker.EXTRA_SELECT_IMAGES);
}
}
</span></span></span></span></span></span></span></span></span></code></pre>
<p>4、如何自定义图片加载器(不定死框架,让框架更加灵活,需要去实现ImageLoader接口即可):</p>
<pre class="hljs java"><code class="java"><span class="hljs-keyword">public <span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">GlideLoader <span class="hljs-keyword">implements <span class="hljs-title">ImageLoader {
<span class="hljs-comment">//to do something 可以参考Demo用法
}
</span></span></span></span></span></span></span></code></pre>
<h3>写在最后:</h3>
<p>这个库会持续维护下去,后续会把大图预览,裁剪等功能添加进去,遵循极简的原则,把库做的尽可能的小,欢迎大家提建议,更加具体的使用请参考下面源码中的Demo演示~</p>
<h2>版本更新里程碑:</h2>
<h4>Version1.0.0:</h4>
<p>1、可预览各文件夹下的图片<br>
2、可配置是否支持相机拍照<br>
3、可配置选择图片模式(单选/多选)<br>
4、可配置选择图片数量 5、可配置图片加载框架</p>
<h4>Version1.1.0:</h4>
<p>1、新增大图预览功能(初步实现,考虑性能后期会改为Fragment承载,单一Activity架构)<br>
2、更改选择图片文件夹弹窗高度<br>
3、更改ImageLoader接口,开放小图加载、大图加载、清除缓存方法</p>
<h4>Version2.0.0:</h4>
<p>1、重构了大量的代码,更加注重代码间的解耦,相比1.0版本简化了配置项(下沉FileProvider),让开发者可以更专注于业务。<br>
2、添加媒体库扫描对GIF、视频的支持,并开放接口让开发者自行实现视频播放逻辑。<br>
3、添加媒体库加载策略,开发者可自行配置加载图片或者视频,灵活运用于不同业务实现。<br>
4、完善大图预览功能,完善部分UI界面的显示。</p>
<h3>源码下载:</h3>
<p>这里附上源码地址(欢迎Star,欢迎Fork):ImagePicker</p>
</div>
</div><br><br>
来源:https://www.cnblogs.com/yelanggu/p/10831537.html
頁:
[1]