Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
转载:http://blog.csdn.net/xiaanming/article/details/18730223 写这篇文章之前,先简单说几句,首先是先恭喜下自己获得了2013年的博客之星称号,很意外也很开心,自己是从2013年开始写博客,那时候也不知道怎么写,我从小就不喜欢写日记,作文什么的,所以刚开始都是贴代码,也没有人看,后面慢慢的,写的文章被推荐博客首页和CSDN首页(这里也要小小的感谢下小编MM),访问量逐渐的多了起来,有更多的人看我的文章,这也使自己有了继续写文章的动力,也希望我写的东西对大家有点帮助吧,在2014年我会继续在CSDN上面写博客,然后是感谢博客之星给我投票支持我的朋友们,谢谢你们支持我的每一票,最后就是2014春节马上就到了,提前祝福大家新年快乐,工作顺利,事事顺心! 回到主题,之前群里面有朋友问我,有没有关于本地图片选择的Demo,类似微信的效果,他说网上没有这方面的Demo,问我能不能写一篇关于这个效果的Demo,于是我研究了下微信的本地图片选择的Demo,自己仿照的写了下分享给大家,希望对以后有这样子需求的朋友有一点帮助吧,主要使用的是ContentProvider扫描手机中的图片,并用GridView将图片显示出来,关于GridView和ListView显示图片的问题,一直是一个很头疼的问题,因为我们手机的内存有限,手机给每个应用程序分配的内存也有限,所以图片多的情况下很容易伴随着OOM的发生,不过现在也有很多的开源的图片显示框架,对显示很多图片进行了优化,大家有兴趣的可以去了解了解,今天我的这篇文章使用的是LruCache这个类(之前写了一篇使用LruCache加载网络图片的Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅)以及对图片进行相对应的裁剪,这样也可以尽量的避免OOM的发生,我们先看下微信的效果吧 接下来我们就来实现这些效果吧,首先我们新建一个项目,取名ImageScan 首先我们先看第一个界面吧,使用将手机中的图片扫描出来,然后根据图片的所在的文件夹将其分类出来,并显示所在文件夹里面的一张图片和文件夹中图片个数,我们根据界面元素(文件夹名, 文件夹图片个数,文件夹中的一张图片)使用一个实体对象ImageBean来封装这三个属性 **[java]** [view plain](http://blog.csdn.net/xiaanming/article/details/18730223#)[copy](http://blog.csdn.net/xiaanming/article/details/18730223#)[](https://code.csdn.net/snippets/169891)[](https://code.csdn.net/snippets/169891/fork) <div> <embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_1"> </embed> </div> </div> - <span class="keyword">package</span> com.example.imagescan; - - <span class="comment">/**</span> - <span class="comment"> * GridView的每个item的数据对象</span> - <span class="comment"> * </span> - <span class="comment"> * @author len</span> - <span class="comment"> *</span> - <span class="comment"> */</span> - <span class="keyword">public</span> <span class="keyword">class</span> ImageBean{ - <span class="comment">/**</span> - <span class="comment"> * 文件夹的第一张图片路径</span> - <span class="comment"> */</span> - <span class="keyword">private</span> String topImagePath; - <span class="comment">/**</span> - <span class="comment"> * 文件夹名</span> - <span class="comment"> */</span> - <span class="keyword">private</span> String folderName; - <span class="comment">/**</span> - <span class="comment"> * 文件夹中的图片数</span> - <span class="comment"> */</span> - <span class="keyword">private</span> <span class="keyword">int</span> imageCounts; - - <span class="keyword">public</span> String getTopImagePath() { - <span class="keyword">return</span> topImagePath; - } - <span class="keyword">public</span> <span class="keyword">void</span> setTopImagePath(String topImagePath) { - <span class="keyword">this</span>.topImagePath = topImagePath; - } - <span class="keyword">public</span> String getFolderName() { - <span class="keyword">return</span> folderName; - } - <span class="keyword">public</span> <span class="keyword">void</span> setFolderName(String folderName) { - <span class="keyword">this</span>.folderName = folderName; - } - <span class="keyword">public</span> <span class="keyword">int</span> getImageCounts() { - <span class="keyword">return</span> imageCounts; - } - <span class="keyword">public</span> <span class="keyword">void</span> setImageCounts(<span class="keyword">int</span> imageCounts) { - <span class="keyword">this</span>.imageCounts = imageCounts; - } - - } 接下来就是主界面的布局啦,上面的导航栏我没有加进去,只有下面的GridView,所以说主界面布局中只有一个GridView ...