Android图片框架之universal-image-loader

在Android开发中有各种各样的开源框架,像xUtils中的BitmapUtils,Volley中的ImageRequest请求队列,等都可以用来进行异步下载图片,然而,在这篇博客中却并不涉及他们,说的是另外一个专门针对图片加载的异步请求框架,universal-image-loader。
image-loader在使用之前,要在Application中进行初始化,得到他的对象,并进行各项设置,image-loader内部是使用单例模式来获得对象
一:Application中初始化各项设置,内存缓存,磁盘缓存设置

package com.longyue.image_loader;


import java.io.File;

import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

import android.app.Application;
import android.os.Environment;

public class MyApp extends Application {
    //磁盘缓存路径
    private String cachepath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "缓存练习";
    @Override
    public void onCreate() {
        super.onCreate();
        //得到ImageLoader实例
        ImageLoader loader  = ImageLoader.getInstance();
        //对ImageLoader进行各项设置
        ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(getApplicationContext());
        //设置磁盘中可存储的文件数量
        builder.diskCacheFileCount(100);
        //设置磁盘缓存的大小
        builder.diskCacheSize(8*1024*1024*10);
        //定义磁盘缓存路径
        builder.diskCache(new UnlimitedDiscCache(new File(cachepath)));
        //设置内存缓存的大小memoryCacheSize
        int memoryCacheSize = (int) (Runtime.getRuntime().maxMemory()/4);
        builder.memoryCacheSize(memoryCacheSize);
        //把应用内存的?%给缓存
        //builder.memoryCacheSizePercentage(30);
        //指定线程池的大小
        builder.threadPoolSize(6);
        //设置线程的优先级
        builder.threadPriority(Thread.NORM_PRIORITY);
        //进行填充设置
        loader.init(builder.build());
    }
}

二:在主界面中进行下载,调用等操作

package com.longyue.image_loader;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageSize;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.app.Activity;
import android.graphics.Bitmap;

public class MainActivity extends Activity {
    private ImageView iv;
    private String uri = "http://img.firefoxchina.cn/2015/07/5/201507290909430.jpg";
    private ImageLoader loader;
    /* (non-Javadoc)
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = (ImageView) findViewById(R.id.iv);
        loader = ImageLoader.getInstance();
        //清空磁盘缓存
        //loader.clearDiskCache();
        //清空内存缓存
        //loader.clearMemoryCache();
        //暂停图片下载任务
        //loader.pause();
        //恢复下载任务
        //loader.resume();
        //停止下载任务
        //loader.stop();
        //销毁ImageLoader实例
        //loader.destroy();

        //1:不传builder参数
        //loader.displayImage(uri, iv);

        //2:传buider参数 推荐
        DisplayImageOptions.Builder builder = new DisplayImageOptions.Builder();
        //是否开启内存缓存.默认是开启的
        builder.cacheInMemory(true);
        //是否开启磁盘缓存
        builder.cacheOnDisk(true);
        //图片下载失败的时候默认显示的图片
        builder.showImageOnFail(R.drawable.ic_launcher);
        //图片下载过程中默认显示的图片
        builder.showImageOnLoading(R.drawable.ic_launcher);
        //loader.displayImage(uri, iv, builder.build());


        //3在回调方法内部完成控件的加载
        //图片的尺寸,还可以传递第三个参数,图片的角度
        ImageSize size = new ImageSize(500, 500);
        loader.loadImage(uri,size,new ImageLoadingListener() {
            //开始下载调用方法
            @Override
            public void onLoadingStarted(String imageUri, View view) {

            }
            //下载失败调用此方法
            @Override
            public void onLoadingFailed(String imageUri, View view,
                    FailReason failReason) {
                Log.e("load_image_error",failReason.toString());
                iv.setImageResource(R.drawable.ic_launcher);
            }
            //下载完成调用此方法
            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                iv.setImageBitmap(loadedImage);
            }
            //取消下载调用此方法
            @Override
            public void onLoadingCancelled(String imageUri, View view) {

            }
        });
    }
}

Image_loader方法封装

//对ImageLoader进行各项设置,,在application中调用
    public static void setCustomImageLaoder(Context context){
        //得到ImageLoader实例
        ImageLoader loader  = ImageLoader.getInstance();
        //对ImageLoader进行各项设置
        ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(context);
        //设置磁盘中可存储的文件数量
        builder.diskCacheFileCount(200);
        //设置磁盘缓存的大小
        builder.diskCacheSize(8*1024*1024*100);
        //定义磁盘缓存路径
        builder.diskCache(new UnlimitedDiscCache(new File(Constants.cachepath)));
        //设置内存缓存的大小memoryCacheSize
        int memoryCacheSize = (int) (Runtime.getRuntime().maxMemory()/4);
        builder.memoryCacheSize(memoryCacheSize);
        //把应用内存的?%给缓存
        //builder.memoryCacheSizePercentage(30);
        //指定线程池的大小
        builder.threadPoolSize(6);
        //设置线程的优先级
        builder.threadPriority(Thread.NORM_PRIORITY);
        //进行填充设置
        loader.init(builder.build());
    }



    //利用ImageLoader进行图片的下载,,调用
    public static void DownLoadImage(String url,ImageView iv){
        ImageLoader loader = ImageLoader.getInstance();
        DisplayImageOptions.Builder builder = new DisplayImageOptions.Builder();
        //是否开启内存缓存.默认是开启的
        builder.cacheInMemory(true);
        //是否开启磁盘缓存
        builder.cacheOnDisk(true);
        //图片下载失败的时候默认显示的图片
        builder.showImageOnFail(R.drawable.loading_not);
        //图片下载过程中默认显示的图片
        builder.showImageOnLoading(R.drawable.loading_not);
        //没有图片资源时显示图片
        builder.showImageForEmptyUri(R.drawable.loading_not);
        loader.displayImage(url, iv, builder.build());
    }
    //ImageLoader清除缓存
    public void RemoveImageCache(){
        ImageLoader loader = ImageLoader.getInstance();
        //清空磁盘缓存
        loader.clearDiskCache();
        //清空内存缓存
        loader.clearMemoryCache();
        //销毁ImageLoader实例
        //loader.destroy();
    }

Demo下载

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值