Android开发中,加载本地文件夹下所有图片并显示在GridView中

Android开发中,加载本地文件夹下所有图片并显示在GridView中,第1张

这个工程相对复杂一点,一点一点来解释。

注意,这里的gridview一定要先设置好id以及列数。

在Activity中初始化,这个就简单了。

首先,我们写一个获取本地文件的帮助类。

此类中包含两个方法,第一个方法需要传入一个String类型的文件夹路径,会返回一个给定路径中图片的全名称(包括扩展名)。

第二个方法是用于过滤文件夹下的图片文件。

然后,在Activity中调用上面的方法,传入一个需要遍历的文件夹路径。

将返回的图片全名和给定的路径拼接成资源路径,放进一个String类型的数组里面。

首先,我们新建一个javaBean类,用于结构化我们获取的图片数据。

一个title,一个imageId。

然后,到了最关键的一步,重写适配器类。

构造方法里需要传入三个参数,titles数组,imageId数组,以及当前上下文。

当然,gridView的item布局文件我们不能忘记。

之后就是继承BaseAdapter,重写适配器了。

今天要介绍的是Github上一个使用非常广泛的图片异步加载库Android-Universal-Image-Loader,该项目的功能十分强大,可以说是我见过的目前功能最全、性能最优的图片异步加载解决方案。做Android的同学都知道,Android加载大量图片时,由于系统分配给图片加载的内存大小有限,所以,如果加载图片量非常大的话容易报OOM异常,关于这个异常已经有不少解决方案了,我就不赘述。下面就简要介绍下这个开源项目的主要功能和使用:一、功能概要多线程图片加载;灵活更改ImageLoader的基本配置,包括最大线程数、缓存方式、图片显示选项等;图片异步加载缓存机制,包括内存缓存(软引用)及本地缓存;对加载过程实现监听和事件处理;能够配置加载图片的显示选项,包括图片圆角处理和加载完成显示动画等;二、基本使用下载jar包universal-image-loader-1.8.5-with-sources.jar并导入工程(这应该不用教了吧)配置Manifest文件,添加网络请求和访问外部存储的权限,因为要进行网络请求和本地缓存[html] view plain copy<uses-permission android:name="android.permission.INTERNET" /><!-- Include next permission if you want to allow UIL to cache images on SD card --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />3. 实现自定义的MyApplication类,并初始化ImageLoader,注意要在Manifest的Application标签注明android:name=".MyApplication",否则还是使用的默认的Application类。[java] view plain copypublic class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate()// This configuration tuning is custom. You can tune every option, you may tune some of them,// or you can create default configuration by// ImageLoaderConfiguration.createDefault(this)// method.ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()).threadPriority(Thread.NORM_PRIORITY - 2).denyCacheImageMultipleSizesInMemory().discCacheFileNameGenerator(new Md5FileNameGenerator()).tasksProcessingOrder(QueueProcessingType.LIFO).enableLogging() // Not necessary in common.build()//Initialize ImageLoader with configurationImageLoader.getInstance().init(config)}}4. 配置图片加载及显示选项,此处有多种自定义配置选项,可以查看doc文档一一了解,这里就不赘述(实在太多)[java] view plain copyDisplayImageOptions options = new DisplayImageOptions.Builder().showStubImage(R.drawable.ic_launcher).showImageForEmptyUri(R.drawable.ic_launcher).showImageOnFail(R.drawable.ic_launcher).cacheInMemory(true).cacheOnDisc(false).displayer(new RoundedBitmapDisplayer(20)).build()5. 使用ImageLoader加载图片,这里以在ListView中为每个item异步加载图片为例,只要在Adapter的getView方法中调用如下方法即完成了异步列表图片加载,其中options是之前定义的图片加载和显示选项,animateFirstListener是当图片第一次加载的监听事件,目的在于显示一个淡入的显示效果动画,可以添加其他事件另外,本例还实现了当列表滑动过程中暂停加载和在用户手放开时才开始加载的功能,这样的好处是保证在列表图片异步加载的过程中不出现卡顿的现象,保证加载的顺滑性。实现这一功能的手段是使ListView监听一个由ImageLoader包含的监听事件PauseOnScrollListener。若设置cacheOnDisc(true)的话,则缓存的文件可以在/sdcard/Android/data/[package_name]/cache目录下看到。不过建议定期清理缓存,否则时间一长,SD卡就会被占满了,同时也可以在ImageLoaderConfiguration中配置SD的缓存策略,有限制缓存文件数量的,有限制缓存文件最大尺寸等选项。如果在使用过程中遭遇OOM异常,则建议在ImageLoaderConfiguration中设置threadPoolSize在1-5之间合适。在DisplayOption配置时使用。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11769998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存