使用Universal-Image-Loader框架加载图片

本文详细介绍如何使用Universal-Image-Loader框架加载网络和本地图片。包括配置ImageLoader、加载图片的方法、设置缓存策略及监听图片加载进度等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Universal-Image-Loader框架加载图片

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

下载后,新建工程,将jar导入到工程的libs目录中。

加载网络图片

1、初始化ImageLoader

新建类继承Application,在Application的onCreate()方法中初始化ImageLoader

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);  //1、创建使用默认参数的ImageLoaderConfiguration
        /* ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context)  
        .memoryCacheExtraOptions() 
        .diskCacheExtraOptions()  
        .taskExecutor()  
        .taskExecutorForCachedImages()  
        .threadPoolSize() 
        .threadPriority()   
        .tasksProcessingOrder()   
        .denyCacheImageMultipleSizesInMemory()  
        .memoryCache()  
        .memoryCacheSize()  
        .memoryCacheSizePercentage()   
        .diskCache() 
        .diskCacheSize()  
        .diskCacheFileCount()  
        .diskCacheFileNameGenerator() 
        .imageDownloader()  
        .imageDecoder().defaultDisplayImageOptions()
        .writeDebugLogs()  
        .build();  //2、设置ImageLoaderConfiguration的其他参数*/
        ImageLoader.getInstance().init(configuration);
    }

上面的第一种为创建使用默认参数的ImageLoaderConfiguration,若要配置ImageLoaderConfiguration的其他参数,可以使用第二种方法来设置

例如要自定义图片的缓存目录,可以这样初始化ImageLoaderConfiguration:

File cacheDir = StorageUtils.getOwnCacheDirectory(this, "sdcard/BitmapCache");
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).diskCache(new UnlimitedDiskCache(cacheDir)).build();
ImageLoader.getInstance().init(configuration);

这样,缓存的图片会放在SD卡的BitmapCache目录下

2、修改AndroidManifest文件中的application名称为自定义的Application

<application
        android:name=".MyApplication"  //自定义Application类
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        ...
    </application>

3、加载图片

有两种方法可以加载图片,分别是loadImage()和displayImage(),下面将分别用这两种方法来加载

  • 使用loadImage()加载图片
ImageLoader.getInstance().loadImage(uri, listener);
ImageLoader.getInstance().loadImage(uri, options, listener);
ImageLoader.getInstance().loadImage(uri, targetImageSize, listener);
ImageLoader.getInstance().loadImage(uri, targetImageSize, options, listener);
ImageLoader.getInstance().loadImage(uri, targetImageSize, options, listener, progressListener)

参数含义:
uri:所要加载图片的地址
listener:ImageLoadingListener对象
targetImageSize:限定图片加载的尺寸大小
options:DisplayImageOptions实例,可以配置图片加载的选项
progressListener:ImageLoadingProgressListener对象,监听图片加载进度

实现加载图片:

    ImageLoader.getInstance().loadImage(uri, new ImageLoadingListener() {

            @Override
            public void onLoadingStarted(String arg0, View arg1) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) {
                // TODO Auto-generated method stub
                //图片加载完成后,显示图片
            }

            @Override
            public void onLoadingCancelled(String arg0, View arg1) {
                // TODO Auto-generated method stub

            }
        });

SimpleImageLoadingListener实现了ImageLoadingListener接口,对其中的方法提供了空实现,若要实现其中的部分方法,可以在loadImage()方法中传入SimpleImageLoadingListener

使用DisplayOptions配置图片选项:

DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true) //设置内存缓存
.cacheOnDisk(true).build(); //设置磁盘缓存
ImageLoader.getInstance().loadImage(uri, options, new SimpleImageLoadingListener() {
            //要实现的方法
        });
  • 使用displayImage()加载图片

    使用displayImage()加载图片时,只需将DisplayImageOptions配置好后传入

DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.loading_drawble) //设置占位图片
.showImageOnFail(R.drawable.fail_drawble) //设置加载失败后显示的图片
.cacheInMemory(true)
.cacheOnDisk(true).build();
        ImageLoader.getInstance().displayImage(uri, imageView, options);

监听图片加载进度:

ImageLoader.getInstance().displayImage(uri, imageView, options, new ImageLoadingProgressListener() {

            @Override
            public void onProgressUpdate(String arg0, View arg1, int arg2, int arg3) {
                // TODO Auto-generated method stub
                //可以在这里显示图片加载进度
            }
        });

加载本地图片

ImageLoader可以加载网络图片,也可以加载本地图片,区别在于加载时传入的uri不同

加载本地文件存储中的图片:

String uri = “file:///sdcard/image.png”;
String uri = Schema.FILE.wrap(“sdcard/image.png”);

加载drawable目录下的图片:

String uri = “drawable://” + R.drawable.image
String uri = Schema.FILE.wrap(R.drawable.image + “”) //此处要特别注意,使用wrap方法时,里面的参数为资源id的字符串形式,可以使用R.drawable.image + “”或String.valueOf(R.drawable.image)

加载assets目录下的图片:

String uri = “assets://image.png”;
String uri = Scheme.ASSETS.wrap(“image.png”);

加载来自ContentProvider的图片:

String uri = “content://media/external/images/media/13”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值