Android UI-开源框架ImageLoader完美使用+listview加载网络图片与下载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33776306/article/details/52055703

            我们经常会从网上加载大量的图片,处理不好,经常会出现内存溢出,导致app崩溃,还有下载速度慢登问题。ImageLoader基本避免了这些问题,下载速度快,基本不会出现内存泄漏,还有很好的缓存管理机制,自己感觉很好用的,下面,给大家分享一下其简单的使用方法,主要是java代码,布局比较简单就不贴了:


1,强jar包导入到libs目录下;

   下载地址:https://github.com/nostra13/Android-Universal-Image-Loader

2,重写Application,实例化imageloader;

<span style="font-size:18px;color:#009900;">import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;

import android.app.Application;
import android.graphics.Bitmap;
import android.os.Environment;
import android.os.Handler;

public class MyApplication extends Application{
	
	private MyApplication instance;
	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		
		initImageloader();
	}
	public void initImageloader() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                // 设置图片下载期间显示的图  
                .showImageOnLoading(R.drawable.ic_launcher) 
                 // 设置图片Uri为空或是错误的时候显示的图片  
                 .showImageForEmptyUri(R.drawable.ic_launcher)
                   // 设置图片加载/解码过程中错误时候显示的图片 
                .showImageOnFail(R.drawable.ic_launcher)
                // 设置图片在下载前是否重置,复位 
                .resetViewBeforeLoading(false) 
                //  设置下载的图片是否缓存在内存
                .cacheInMemory(true) 
                // 设置下载的图片是否缓存在SD卡中
                .cacheOnDisk(true) 
                 // 保留Exif信息  
                .considerExifParams(true) 
                  // 设置图片以如何的编码方式显示  
                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
                // 设置图片的解码类型  
                .bitmapConfig(Bitmap.Config.ARGB_8888)
                // 设置成圆角图  
                .displayer(new RoundedBitmapDisplayer(20)) 
                  // 设置图片下载前的延迟  
                .delayBeforeLoading(100)// int  
                .handler(new Handler()) // 
                .build();; // 创建配置过得DisplayImageOption对象 
//// 自定义缓存的路径  
        File picPath = new File(Environment.getExternalStorageDirectory()
                .getPath()+ File.separator+ "MyDemo"+ File.separator+ "files");
// ImageLoaderConfiguration的配置主要是全局性的配置,主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置。
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
                getApplicationContext())
                // max width, max height,即保存的每个缓存文件的最大长宽  
                .memoryCacheExtraOptions(480, 800)
                // default = device screen dimensions
                .diskCacheExtraOptions(480, 800, null)
                //线程池内加载的数量
                .threadPoolSize(3)
                // 线程优先级
                .threadPriority(Thread.NORM_PRIORITY - 1)
                // default
                .tasksProcessingOrder(QueueProcessingType.FIFO)
                // default
                .denyCacheImageMultipleSizesInMemory()
                .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
                .memoryCacheSize(2 * 1024 * 1024)
                .memoryCacheSizePercentage(13)
                //// 自定义缓存路径  
                .diskCache(new UnlimitedDiskCache(picPath))
                 //硬盘缓存50MB
                .diskCacheSize(50 * 1024 * 1024)
                //缓存的文件数量
                .diskCacheFileCount(1000)
                //将保存的时候的URI名称用MD5  
//                .diskCacheFileNameGenerator(new Md5FileNameGenerator())  
               // 将保存的时候的URI名称用HASHCODE加密
                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
                // default
                .imageDownloader(new BaseImageDownloader(getApplicationContext())) // default
               // connectTimeout (5 s), readTimeout (30 s)超时时间  
//                .imageDownloader( new BaseImageDownloader(context, 5 * 1000,  30 * 1000))
                .imageDecoder(new BaseImageDecoder(true)) // default
                .defaultDisplayImageOptions(options) // default
                .writeDebugLogs().build();
                // 全局初始化此配置  
                ImageLoader.getInstance().init(config);</span><pre name="code" class="html"></span></span></span>
 
 3,listview适配器 
 
<span style="font-size:18px;color:#009900;"><span style="font-size:18px;color:#009900;"><span style="font-size:18px;color:#009900;"><span style="font-size:14px;color:#009900;">package com.example.image_loader;

import com.nostra13.universalimageloader.core.ImageLoader;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

public class ImgListAdapter extends BaseAdapter{


    class ViewHolder {
        public ImageView Img;

    }

    private Context context;
    private LayoutInflater layoutinflater;
    private String[] imageUrls;

    public ImgListAdapter(String[] urls, Context context) {
        this.context = context;
        this.imageUrls = urls;
        this.layoutinflater = LayoutInflater.from(context);

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return imageUrls.length;
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = layoutinflater.inflate(R.layout.item_list_image, null);
            viewHolder = new ViewHolder();
             viewHolder.Img=(ImageView) convertView.findViewById(R.id.image);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        // 通过ImageLoader来获取网络图片
        ImageLoader.getInstance().displayImage(imageUrls[position],
                viewHolder.Img);

        return convertView;

    }

}</span>
</span></span></span>

4,listviewActivity代码

<span style="font-size:18px;color:#009900;"><span style="font-size:18px;color:#009900;"><span style="font-size:18px;color:#009900;">public class ListViewActivity extends Activity{
	ImgListAdapter adapter;
	
	private ImageView img;
	
	private ListView listview;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.listview);
		 listview = (ListView) findViewById(R.id.list);
	        adapter = new ImgListAdapter(ImgUrl.IMAGES,getApplicationContext());
	        listview.setAdapter(adapter);
	        listview.setOnScrollListener(new PauseOnScrollListener(ImageLoader
	                .getInstance(), false, true));

	}
	
}
</span></span></span>


5,注意事项

    manifest中权限添加

  <uses-permission android:name="android.permission.INTERNET"/>
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

 <application
        android:name="MyApplication"

     .....

           >



猜你喜欢

转载自blog.csdn.net/qq_33776306/article/details/52055703