ImageLoader的使用

来源:互联网 发布:淘宝上手机便宜那么多 编辑:程序博客网 时间:2024/05/03 04:16

              首先导入我们要使用的jar包,下载地址:https://github.com/nostra13/Android-Universal-Image-Loader;

下载完成后导入我们的工程项目中

然后创建一个类继承Application

首先我们通过位图加工厂得到一个图片设置效果的权限

其次我设置里面的一些效果,直接上代码,里面都有注释

options1 = newDisplayImageOptions.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(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 RoundedBitmapDisplayer(20))//圆角的一个设置
        // handler 对象,默认为 null
        .handler(new Handler())
        .build();

然后我们在配置一下里面的参数,直接上代码

//初始化配置参数
public static ImageLoaderConfiguration configuration(Context context){
//这里的路径可以自定义
File chFile=StorageUtils.getCacheDirectory(context);
//拿到一个图片加载的参数构造器
ImageLoaderConfiguration configuration = 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(chFile))
        //硬盘缓存大小
        .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 configuration;

以上配置可以按照自己的要求来设置,都有注释,自己更改的话应该不难

然后返回这个配置参数,当然这些还是不够的,我们还没有拿到ImageLoader实例

//拿到一个ImageLoader的实例
public static ImageLoader getLoader(Context context){
if (loader==null) {
loader = ImageLoader.getInstance();
//给ImageLoader设置配置参数
loader.init(configuration(context));
//给imageloader设置显示参数:定义怎么显示
initOpation();//控制不同的显示效果
}
return loader;
}

拿到以后我们就可以在MainActivity中调用这个方法获取我们的一些配置,并设置到相应空间上,

public class MainActivity extends Activity {
private String ss="http://img5.imgtn.bdimg.com/it/u=2026257126,3002325057&fm=21&gp=0.jpg";
@Override

//我们需要调用displayImage方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyApp.getLoader(getApplicationContext()).displayImage(ss, 
(ImageView)findViewById(R.id.imageview), 
MyApp.options1);
MyApp.getLoader(getApplicationContext()).displayImage("http://y2.ifengimg.com/a/" +
"2015_38/2cafb01b79a4f86.jpg", 
(ImageView)findViewById(R.id.imageview2), 
MyApp.options2);
}
}

显示的是两个不同效果的图片,我在这里是直接给了两个网址,这样就可以了,大家可以按照我的感受一下,当然还有很多,比如从网络获取图片的时候,我们都可以用ImageLoader,其实本人感觉ImageLoader还是非常好用的~~~~







1 0