android图片缓存框架Android-Universal-Image-Loader(二)
http://blog.csdn.net/king_is_everyone/article/details/35595515
这篇打算直接告诉大家怎么用吧,其实这个也不是很难的框架,大致使用过程如下:
- // 获取缓存图片目录
- 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结尾的,是一堆无格式的文件,可以通过扩展名导出打开
第二步设置显示图片选项:
- </pre><p></p><p><pre name="code" class="java">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<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());
- @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图片缓存框架Android-Universal-Image-Loader(二)的更多相关文章
- Android图片缓存框架Glide
Android图片缓存框架Glide Glide是Google提供的一个组件.它具有获取.解码和展示视频剧照.图片.动画等功能.它提供了灵活的API,帮助开发者将Glide应用在几乎任何网络协议栈中. ...
- android图片缓存框架Android-Universal-Image-Loader
http://blog.csdn.net/king_is_everyone/article/details/34107081 最近跟同学们做了一个创业项目,其实跟以前做项目不同,以前大多数都是做web ...
- Android图片载入框架最全解析(一),Glide的基本使用方法
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53759439 本文同步发表于我的微信公众号.扫一扫文章底部的二维码或在微信搜索 郭 ...
- Android图片缓存之初识Glide
前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...
- Android图片缓存之Bitmap详解
前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...
- 安卓高级 Android图片缓存之初识Glide
前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...
- Android图片缓存之初识Glide(三)
前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...
- Android图片缓存之Bitmap详解(一)
前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. Bitmap: Bitmap是Android ...
- Android图片缓存之Lru算法
前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...
随机推荐
- js作用域与作用域链
一直对Js的作用域有点迷糊,今天偶然读到JavaScript权威指南,立马被吸引住了,写的真不错.我看的是第六版本,相当的厚,大概1000多页,Js博大精深,要熟悉精通需要大毅力大功夫. 一:函数作用 ...
- 《zip命令》-linux命令五分钟系列之九
本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...
- php 之 查询 投票练习(0508)
练习题目: 解题: 方法一: 1. 投票主页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- Trigger model Trigger expr_id in WorkFolow
For example, suppose you want to set a Sale Order into the state "Done" once it has been s ...
- 【C语言】字符集和词汇
C语言字符集和词汇 一.相关基础知识 字符是组成语言的最基本的元素 词汇,又称语汇,是一种语言里所有的(或特定范围的)词和固定短语的总和 二.具体内容 C语言字符集由:字母.数字.空格.标点和特殊字符 ...
- HTML中如何添加日历插件(JQUERY)
日期插件的包为:mydate.js1:首先将日期插件的包引入到页面中 1 <script language="JavaScript" src="../Inc/Js/ ...
- Java 可视化垃圾回收
基础 当谈到释放不再使用的内存,垃圾回收已经在很大程度上取代了早期技术,比如手动内存管理和引用计数. 这是件好事,因为内存管理令人厌烦,学究式地簿记是计算机擅长的,而不是人擅长的.在这方面,语言的运行 ...
- 如何定义让两个div横向排列
方法一: 一般情况,默认的div是写一个换一行,那么如何定义两个div横向排列而不换行呢? div默认的display属性是block.所以每一个div都是新的一行,现在把display换成inlin ...
- Finding Nemo(bfs)
Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 6988 Accepted: 1600 Description Nemo ...
- javascript 基础学习整理
1. javascript是动态语言,脚本语言,弱类型语言. 2. javascript代码在html文件中的位置安排,放在<body></body>内部与外部的区别.如何引用 ...