ImageLoader用法 图片加载

相信大家平时做Android应用的时候,多少会接触到异步加载图片,或者加载大量图片的问题,而加载图片我们常常会遇到许多的问题,比如说图片的错乱,OOM等问题,对于新手来说,这些问题解决起来会比较吃力,所以就有很多的开源图片加载框架应运而生,比较著名的就是Universal-Image-Loader、Picasso、fresco等网络加载框架。这里简单介绍一下Universal-Image-Loader的用法

首先在要使用ImageLoader就要到github网站上搜索Universal-Image-Loader,然后下载

universal-image-loader-1.9.5.jar 包:

然后把jar包导入你的项目中

新建一个MyApplication继承Application,并在onCreate()中创建ImageLoader的配置参数,并初始化到ImageLoader中代码如下

package com.example.imageloaderdddd.appMy;

import java.io.File;

import android.app.Application;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.os.Handler;

import com.example.imageloaderdddd.R;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
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 com.nostra13.universalimageloader.utils.StorageUtils;


public class MyApplication extends Application {
	
	public static ImageLoader imageLoader;
	//定义了几个显示的效果
		public static DisplayImageOptions options1;
		public static DisplayImageOptions options2;
	
	
	
	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		imageLoader = ImageLoader.getInstance();
		//给ImageLoader设置配置参数
		imageLoader.init(initConfig(this));
		//给imageloader设置显示参数:定义怎么显示
		initOption();//控制不同的显示效果
		
		
	}
	
	//得到ImageLoader的实例
		public static ImageLoader getImageLoader(Context context){
			if (imageLoader==null) {
				imageLoader = ImageLoader.getInstance();
				//给ImageLoader设置配置参数
				imageLoader.init(initConfig(context));
				//给imageloader设置显示参数:定义怎么显示
				initOption();//控制不同的显示效果	
			}
			return imageLoader;
		}
		
		
	
	//初始化配置参数
		private static ImageLoaderConfiguration initConfig(Context context) {
			//这里的路径可以自定义
			 File cacheDir = StorageUtils.getCacheDirectory(context);

			        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
			                // 默认等于你的屏幕尺寸,设备屏幕宽高
			                .memoryCacheExtraOptions(480, 800)
			                // 在将下载的图片保存到你的sd卡之前会重新计算,压缩。
			                // 这个属性不要滥用,只有你在对应的需求时再用,因为他会使你的ImageLoader变的很慢。
			                .diskCacheExtraOptions(480, 800, null)
			                //用于执行从源获取图片任务的 Executor,为configuration中的 taskExecutor,
			                // 如果为null,则会调用DefaultConfigurationFactory.createExecutor(…)根据配置返回一个默认的线程池。
			                .taskExecutor(null)
			                //用于执行从缓存获取图片任务的 Executor,为configuration中的 taskExecutorForCachedImages,
			                // 如果为null,则会调用DefaultConfigurationFactory.createExecutor(…)根据配置返回一个默认的线程池。
			                .taskExecutorForCachedImages(null)
			                // 表示核心池大小(最大并发数) 默认为3
			                .threadPoolSize(3)
			                // 线程优先级,默认Thread.NORM_PRIORITY - 2
			                .threadPriority(Thread.NORM_PRIORITY - 2)
			                // 任务进程的顺序,默认为:FIFO 先进先出
			                .tasksProcessingOrder(QueueProcessingType.FIFO)
			                //设置内存缓存不允许缓存一张图片的多个尺寸,默认允许。
			                .denyCacheImageMultipleSizesInMemory()
			                //图片内存缓存
			                .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
			                //memoryCacheSize 为 0,则设置该内存缓存的最大字节数为 App 最大可用内存的 1/8。
			                .memoryCacheSize(2 * 1024 * 1024)
			                // 创建最大的内存缓存百分比,默认为 13%
			                .memoryCacheSizePercentage(13)
			                // 硬盘缓存路径,默认为StorageUtils.getCacheDirectory(context)
			                .diskCache(new UnlimitedDiskCache(cacheDir))
			                //硬盘缓存大小
			                .diskCacheSize(50 * 1024 * 1024)
			                //缓存文件数量
			                .diskCacheFileCount(100)
			                // 硬盘缓存文件名生成器,默认为哈希文件名生成器
			                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
			                // 创建图片下载器,默认是BaseImageDownloader
			                .imageDownloader(new BaseImageDownloader(context))
			                // 图片解码器,负责将图片输入流InputStream转换为Bitmap对象
			                .imageDecoder(new BaseImageDecoder(true))
			                // 图片显示的配置项。比如加载前、加载中、加载失败应该显示的占位图片,图片是否需要在磁盘缓存,是否需要在内存缓存等。
			                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
			                //是否显示调试log信息
			                .writeDebugLogs() 
			                .build();
			        return config;
		}
		
		private static void initOption() {
			
			Options options = new BitmapFactory.Options();
			options1 = new DisplayImageOptions.Builder()
	        // 正在加载时显示的占位图
	        .showImageOnLoading(R.drawable.ic_launcher)
	        // URL为空时显示的占位图
	        .showImageForEmptyUri(R.drawable.ic_launcher)
	        // 加载失败时显示的占位图
	        .showImageOnFail(R.drawable.ic_launcher)
	        // 在加载前是否重置 view,默认为false
	        .resetViewBeforeLoading(false)
	        //设置在开始加载前的延迟时间,单位为毫秒,通过 Builder 构建的对象默认为 0
	        .delayBeforeLoading(1000)
	        // 是否缓存在内存中,通过 Builder 构建的对象默认为 false
	        .cacheInMemory(false)
	        // 是否缓存在磁盘中,通过 Builder 构建的对象默认为 false。
	        .cacheOnDisk(false)
	        //缓存在内存之前的处理程序,默认为 null
	        .preProcessor(null)
	        //缓存在内存之后的处理程序,默认为 null。
	        .postProcessor(null)
	        //下载器需要的辅助信息。下载时传入ImageDownloader.getStream(String, Object)的对象,方便用户自己扩展,默认为 null。
	        .extraForDownloader(null)
	        // 是否考虑图片的 EXIF 信息,通过 Builder 构建的对象默认为 false。
	        .considerExifParams(false)
	        // 图片的缩放类型,通过 Builder 构建的对象默认为IN_SAMPLE_POWER_OF_2
	        .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
	        // bitmap的质量,默认为ARGB_8888
	        .bitmapConfig(Bitmap.Config.ARGB_8888)
	        //为 BitmapFactory.Options,用于BitmapFactory.decodeStream(imageStream, null, decodingOptions)得到图片尺寸等信息。
	        .decodingOptions(options)
	        // 在ImageAware中显示 bitmap 对象的接口。可在实现中对 bitmap 做一些额外处理,比如加圆角、动画效果。
	        .displayer(new SimpleBitmapDisplayer())
	        // handler 对象,默认为 null
	        .handler(new Handler())
	        .build();
			
			options2 = new DisplayImageOptions.Builder()
			// 正在加载时显示的占位图
			.showImageOnLoading(R.drawable.ic_launcher)
			// URL为空时显示的占位图
			.showImageForEmptyUri(R.drawable.ic_launcher)
			// 加载失败时显示的占位图
			.showImageOnFail(R.drawable.ic_launcher)
			// 在加载前是否重置 view,默认为false
			.resetViewBeforeLoading(false)
			//设置在开始加载前的延迟时间,单位为毫秒,通过 Builder 构建的对象默认为 0
			.delayBeforeLoading(1000)
			// 是否缓存在内存中,通过 Builder 构建的对象默认为 false
			.cacheInMemory(true)
			// 是否缓存在磁盘中,通过 Builder 构建的对象默认为 false。
			.cacheOnDisk(true)
			//缓存在内存之前的处理程序,默认为 null
			.preProcessor(null)
			//缓存在内存之后的处理程序,默认为 null。
			.postProcessor(null)
			//下载器需要的辅助信息。下载时传入ImageDownloader.getStream(String, Object)的对象,方便用户自己扩展,默认为 null。
			.extraForDownloader(null)
			// 是否考虑图片的 EXIF 信息,通过 Builder 构建的对象默认为 false。
			.considerExifParams(false)
			// 图片的缩放类型,通过 Builder 构建的对象默认为IN_SAMPLE_POWER_OF_2
			.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
			// bitmap的质量,默认为ARGB_8888
			.bitmapConfig(Bitmap.Config.ARGB_8888)
			//为 BitmapFactory.Options,用于BitmapFactory.decodeStream(imageStream, null, decodingOptions)得到图片尺寸等信息。
			.decodingOptions(options)
			// 在ImageAware中显示 bitmap 对象的接口。可在实现中对 bitmap 做一些额外处理,比如加圆角、动画效果。
			.displayer(new  RoundedBitmapDisplayer(20))
			// handler 对象,默认为 null
			.handler(new Handler())
			.build();
			
			
			
			
		}
	
	

}

在MainActivity运行的代码如下

package com.example.imageloaderdddd;

import com.example.imageloaderdddd.appMy.MyApplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        
       MyApplication.getImageLoader(getApplicationContext()).
        displayImage("http://y2.ifengimg.com/a/2015_38/2cafb01b79a4f86.jpg",
        		(ImageView)findViewById(R.id.iv1),
        		MyApplication.options1);
       MyApplication.getImageLoader(getApplicationContext()).
        displayImage("http://y2.ifengimg.com/a/2015_38/2cafb01b79a4f86.jpg",
        		(ImageView)findViewById(R.id.iv2),
        		MyApplication.options2);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

最后记得添加联网权限








  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值