ImageLoader之一加载本地图片

自己写的一个简单的例子,网上好多都写的很复杂所以自己弄出来个稍微简单明了的例子.

ImageLoaderConfiguration是针对图片缓存的全局配置,主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置。

ImageLoader是具体下载图片,缓存图片,显示图片的具体执行类,它有两个具体的方法displayImage(...)、loadImage(...),但是其实最终他们的实现都是displayImage(...)。

DisplayImageOptions用于指导每一个Imageloader根据网络图片的状态(空白、下载错误、正在下载)显示对应的图片,是否将缓存加载到磁盘上,下载完后对图片进行怎么样的处理。

从三者的协作关系上看,他们有点像厨房规定、厨师、客户个人口味之间的关系。ImageLoaderConfiguration就像是厨房里面的规定,每一个厨师要怎么着装,要怎么保持厨房的干净,这是针对每一个厨师都适用的规定,而且不允许个性化改变。ImageLoader就像是具体做菜的厨师,负责具体菜谱的制作。DisplayImageOptions就像每个客户的偏好,根据客户是重口味还是清淡,每一个imageLoader根据DisplayImageOptions的要求具体执行。



import java.util.ArrayList;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;


import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;






import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;


public class MainActivity extends Activity {
private ArrayList<String> list;
private DisplayImageOptions options;
private ListView lv_main;
private AnimateFirstDisplayListener animateFirstDisplayListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


//显示图象选项
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.ic_launcher)    // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.drawable.ic_launcher)// 设置图片Uri为空或是错误的时候显示的图片    
.showImageOnFail(R.drawable.ic_launcher)// 设置图片加载或解码过程中发生错误显示的图片   
.cacheInMemory() // 设置下载的图片是否缓存在内存中
.cacheOnDisc() // 设置下载的图片是否缓存在SD卡中    
.displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片  

.build(); // 创建配置过得DisplayImageOption对象 

  

//用法:ImageLoader.getInstance().displayImage(url, imageView, options); 
//我被坑的一次居然还要这样用,:图像加载程序配置
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(  
    this)
.defaultDisplayImageOptions(options)   //设置默认的显示图片选择
    .threadPriority(Thread.NORM_PRIORITY - 2)  //线程数量,默认5个
    .denyCacheImageMultipleSizesInMemory()   //否认在内存中缓存图像多种尺寸
    .discCacheFileNameGenerator(new Md5FileNameGenerator()) //设置盘缓存文件名的生产者 
    .tasksProcessingOrder(QueueProcessingType.LIFO).build(); //设置任务订单处理(队列处理类型)
ImageLoader.getInstance().init( config);  

//ImageLoader.getInstance().displayImage(url, imageView, options); 
list = getImgPathList();
lv_main = (ListView) findViewById(R.id.lv_img);

MyAdapter adapter = new MyAdapter(list);
lv_main.setAdapter(adapter);
animateFirstDisplayListener = new AnimateFirstDisplayListener();

}

class MyAdapter extends BaseAdapter{


private ArrayList<String> list;


public MyAdapter(ArrayList<String> list) {
this.list = list;
}


@Override
public int getCount() {

return list.size();
}


@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}


@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyHolder holer = null;
if(convertView==null){
holer= new MyHolder();
convertView = View.inflate(getApplicationContext(), R.layout.item_img, null);
holer.iv_item = (ImageView) convertView.findViewById(R.id.iv_item);
holer.tv_item = (TextView) convertView.findViewById(R.id.tv_item);
convertView.setTag(holer);
}else{
holer = (MyHolder) convertView.getTag();
}

ImageLoader.getInstance().displayImage("file:///"+list.get(position), holer.iv_item, options
,animateFirstDisplayListener);
holer.tv_item.setText("md");


return convertView;
}

}
class MyHolder{
ImageView iv_item;
TextView tv_item;
}


/**
* 获取内存中所有图片地址
* @return
*/
private ArrayList<String> getImgPathList() {  
        ArrayList<String> list = new ArrayList<String>();  
        Cursor cursor = getContentResolver().query(  
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,  
                new String[] { "_id", "_data" }, null, null, null);  
        while (cursor.moveToNext()) {  
            list.add(cursor.getString(1));// 将图片路径添加到list中  
        }  
        cursor.close();  
        return list;  
    } 


/** 图片加载监听事件 **/  
    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); // 设置image隐藏动画500ms  
                    displayedImages.add(imageUri); // 将图片uri添加到集合中  
                }  
            }  
        }  
    }  
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值