android图片缓存框架Android-Universal-Image-Loader(二)

这篇打算直接告诉大家怎么用吧,其实这个也不是很难的框架,大致使用过程如下:

// 获取缓存图片目录 File cacheDir = StorageUtils.getOwnCacheDirectory(activity, "imageloader/Cache"); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( activity).memoryCacheExtraOptions(800, 760) // 保存每个缓存图片的最大长和宽 .threadPoolSize(3) .diskCache(new UnlimitedDiscCache(cacheDir)) // 线程池的大小 这个其实默认就是3 .memoryCacheSize(2 * 1024) // 设置缓存的最大字节 .denyCacheImageMultipleSizesInMemory() // 缓存显示不同大小的同一张图片 .imageDownloader( new BaseImageDownloader(activity, 5 * 1000, 30 * 1000)) // connectTimeout // s)超时时间 .build(); imageLoader.init(config);

上面设置的目录在我手机的/storage/sdcard0/imageloader/Cache中文件是没有.jpg或者.png结尾的,是一堆无格式的文件,可以通过扩展名导出打开

第二步设置显示图片选项:

DisplayImageOptionsoptions = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_launcher)//设置图片在下载期间显示的图片 .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.drawable.ic_launcher)//设置图片加载/解码过程中错误时候显示的图片 .cacheInMemory(true)//设置下载的图片是否缓存在内存中 .cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中 .displayer(new FadeInBitmapDisplayer(100)) .considerExifParams(true) .displayer(new FadeInBitmapDisplayer(100))// 图片加载好后渐入的动画时间 .displayer(new RoundedBitmapDisplayer(1)).build();//这个一定要设置,不设置的话会导致图片不能够铺满整个控件,这个是设置圆角效果的,如果大家不喜欢圆角可以设置为1几乎没有什么效果

通过上面的代码就可以正常使用了

下面是官方给的一个列子,会android看看下面的这个代码应该就知道怎么使用了吧,非常简单

public class ImageListActivity extends AbsListViewBaseActivity { DisplayImageOptions options; String[] imageUrls; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ac_image_list); Bundle bundle = getIntent().getExtras(); imageUrls = bundle.getStringArray(Extra.IMAGES); options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_stub) .showImageForEmptyUri(R.drawable.ic_empty) .showImageOnFail(R.drawable.ic_error) .cacheInMemory(true) .cacheOnDisk(true) .considerExifParams(true) .displayer(new RoundedBitmapDisplayer(20)) .build(); listView = (ListView) findViewById(android.R.id.list); ((ListView) listView).setAdapter(new ItemAdapter()); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { startImagePagerActivity(position); } }); }

//注意下这里,当按下返回键的时候清除一下在内存中的图片,大家不过要过度依赖自动内存管理,有些时候还是手动去清除掉内存比较好, @Override public void onBackPressed() { AnimateFirstDisplayListener.displayedImages.clear(); super.onBackPressed(); } private void startImagePagerActivity(int position) { Intent intent = new Intent(this, ImagePagerActivity.class); intent.putExtra(Extra.IMAGES, imageUrls); intent.putExtra(Extra.IMAGE_POSITION, position); startActivity(intent); } private static class ViewHolder { TextView text; ImageView image; } class ItemAdapter extends BaseAdapter { private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener(); @Override public int getCount() { return imageUrls.length; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { View view = convertView; final ViewHolder holder; if (convertView == null) { view = getLayoutInflater().inflate(R.layout.item_list_image, parent, false); holder = new ViewHolder(); holder.text = (TextView) view.findViewById(R.id.text); holder.image = (ImageView) view.findViewById(R.id.image); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } holder.text.setText("Item " + (position + 1)); imageLoader.displayImage(imageUrls[position], holder.image, options, animateFirstListener); return view; } } private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener { static final List displayedImages = Collections.synchronizedList(new LinkedList()); @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if (loadedImage != null) { ImageView imageView = (ImageView) view; boolean firstDisplay = !displayedImages.contains(imageUri); if (firstDisplay) { FadeInBitmapDisplayer.animate(imageView, 500); displayedImages.add(imageUri); } } } } }

这是一个demo,这个图片选项最好配置成一个单列类,便于管理和减少内存的溢出。

点击复制链接 与好友分享!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力
上一篇:Android 代码实现preference组件
下一篇:Android 中查看内存的使用情况集常用adb命令
相关文章

android 缓存管理及LRU算法

Android WebView缓存策略详解

清除应用缓存的方法

Android WebView缓存机制详解

Android图形缓存库picasso解析

Android中关于Volley的使用(八)缓存

Android系统应用信息中存储和缓存的计

Android新浪微博客户端(七)——List

Android新浪微博客户端(七)——List

android4.2.2的stagefright架构下基于

图文推荐
android图片缓存框架Android-Universal-Image-Loader(二)
Android中数据存储方
android图片缓存框架Android-Universal-Image-Loader(二)
Android OTA升级包制
android图片缓存框架Android-Universal-Image-Loader(二)
Android从普通发送和
android图片缓存框架Android-Universal-Image-Loader(二)
Android开发:Parall

分类:默认分类 时间:2013-12-02 人气:1
本文关键词:
分享到:

相关文章

  • Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 2013-12-19

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 大家好!差不多两个来月没有写文章了,前段时间也是在忙换工作的事,准备笔试面试什么的事情,现在新工作找好了,新工作自己也比较满意,唯一遗憾的就是自己要去一个新的城市,新的环境新的开始,希望自己能尽快的适应新环境,现在在准备交接的事情,自己也有一些时间了,所以就继续给大家分享Android方面的东西。 相信大家

  • Android-Universal-Image-Loader框架学习 2012-01-03

    先来看一下Android-Universal-Image-Loader框架的用法; 1、初始化ImageLoaderConfiguration(全局的,在整个application中初始化configuration,配置缓存、加载线程等)、 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( getApplicationContext()) .threadPriority(Thread.NORM_PRIO

  • Android-Universal-Image-Loader异步加载图片框架学习研究 2013-03-31

    GitHub下载地址 https://github.com/nostra13/Android-Universal-Image-Loader 先来看一下Android-Universal-Image-Loader框架的用法; 1、初始化ImageLoaderConfiguration(全局的,在整个application中初始化configuration,配置缓存、加载线程等) ImageLoaderConfiguration config = new ImageLoaderConfigurati

  • android异步加载图片类(续)-universal-image-loader详解 2013-04-25

    之前写过一篇android异步加载图片类 ,后来接触了一个开源项目universal-image-loader,听说淘宝也是用这玩意 发现自己写的那个异步加载类太简单了,虽然功能是实现了,但是很多优化的问题都没有解决 比如: 同一个ui加载同一张图,会出现只加载一张,其他的加载不了 加载多图的时候会有oom等问题 现在来说说universal-image-loader 特点: 多线程的图像加载 的可能性的宽调谐对ImageLoader的配置(线程池的大小,HTTP选项,内存和光盘高速缓存,显示图

  • Android-Universal-Image-Loader 架构梳理 2014-05-30

    源码地址:点击打开链接 Android-Universal-Image-Loader的广泛使用,我们有必要好好研究下他,对于我们使用,和进步都有很多的帮助, 下载图片线程。 6、Downloader,下载任务模块,该模块是负责下载的,网络连接通过两种方式,一个是HttpClient,一个是HttpURLConnection,前者是apache封装的一个类,会保存cookie等信息,支持需要校验用户登录信息的后台服务,后者则不支持,该模块还包括网络慢时候的处理和网络连接失败时候的处理。 7、cac

  • [android篇]android 4.4 短信适配 2014-05-14

    andorid 4.4(KITKAT)对系统很多方面做了改动,在目前的项目中,对短信有直接的影响。我们看一下下面这段文档说明: Advice for SMS backup & restore apps Because the ability to write to the SMSProvider is restricted to the app the user selects as the default SMS app, anyexisting app designed purely

  • Android实践--如何提高Android模拟器的运行速度 2012-02-20

    Android---如何提高模拟器的速度 做Android开发的程序猿们,很多人心中有一纠结:“Android模拟器怎么这么慢啊,用自己的爱机测试有点小小不舍”,谷歌推出的adt-bundle-windows-x86在省去了Android程序猿辛苦安装adt插件的时候还是没有直接解决Android模拟器的速度上的劣势,就在这一点上有点输给了Mac上的ios,今天袁老师悄悄地来揭晓谷歌ADT中的一个小秘密--如何提高模拟器的速度。 ADT默认的器模拟的是 ARM 的体系结构(arm-eabi),这

  • Chromium on Android: Android L平台上WebView的变化及其对浏览器厂商的影响分析 2013-11-26

    摘要:Android L平台在图形渲染方面有一项重要的改进,它引入了一个专门的线程用于执行渲染工作,UI线程负责生成的显示列表(DisplayList),渲染线程负责重放(playback)这个显示列表绘制最终的内容,因此Chromium WebView在图形栈的实现方面也作了相应的调整,以支持Android L系统上新的渲染线程模型。本文将深度分析Chromium WebView的渲染流水线是如何无缝整合到Android L系统的渲染模型中,以及对目前市场主流浏览器厂商将会产生什么样影响等问题

  • Android学习--在Android中使用OpenCV的第一个程序 2014-02-10

    刚开始学习Android,由于之前比较熟悉OpenCV,于是就想先在Android上运行OpenCV试试 =================================================================================== 1.环境配置 JDKEclipseADTCDTAndroid SDKAndroid NDKcygwinOpenCV for Android 2.4.9 这部分网上很多,我就不再赘述了,可以参考:http://blog.csdn

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.120 (s). 10 q(s)