初步使用universal-image-loader

简介

universal-image-loader是一个开源的Android异步加载图片的库,提供一个可重复使用的仪器为异步图像加载,缓存和显示。具体的介绍可以自行搜索,也可以直接看该项目在github上的wiki
由于最近在关注一个Android图片加载的问题,就看下这个库具体要如何使用。

使用方法

1.引入

目前我使用的android开发工具是Android Studio,要使用universal-image-loader只要将相应的jar包下载并导入到工程中即可。具体的导入步骤,可以参见文章《Android Studio导入第三方的jar包》,记录的还算详细。
不过,目前android开发都推荐使用android studio,所以依赖管理都会使用gradle。在gradle引入universal-image-loader很简单,只要在项目的配置文件build.gradle引入相应版本还就可以。

compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

2.权限问题

要使用universal-image-loader一般需要额外给工程加2个权限:访问网络和写入SD卡。想想也知道,要访问网络图片肯定需要网络,如果图片缓存一般情况也都是缓存到SD卡的。
给工程加权限肯定需要修改AndroidManifest.xml文件。

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

3.UI

因为是只是初步接触,所以布局就不搞的非擦汗那个复杂,只是放一个ImageView用以显示图片。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/imageView"
        android:layout_gravity="center_horizontal|top" />
</FrameLayout>

4.注册

通过查询官方的文档,在使用universal-image-loader时,一般需要自己定义一个Application,然后在该Application中完成universal-image-loader初始化操作。所以需要自己定义一个MyApplication,并且将该类在AndroidManifest.xml引入,不然的话android启动不会调用该类。
首先,定义MyApplication类,并继承Application。

package mungo.org.myapplication;

import android.app.Application;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

/**
 * Created by Administrator on 2015/6/9.
 */
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        //ImageLoader
        ImageLoaderConfiguration configuration = ImageLoaderConfiguration
                .createDefault(this);

        //Initialize ImageLoader with configuration.
        ImageLoader.getInstance().init(configuration);
    }
}

然后修改AndroidManifest.xml中application节点,添加

android:name=".MyApplication"

这里需要注意的是,MyApplication类的路径需要在AndroidManifest.xml定义的package下面,不然会找不到。

package="mungo.org.myapplication" >

5.使用

这个时候,配置的工作基本就完成了。剩下的就是如何使用universal-image-loader加载网络图片,并且显示在之前定义的布局文件中的ImageView上了。
可以使用ImageLoader.getInstance().loadImage()方法,loadImage方法有一系列的重载方法。这里就选用比较简单一种,至于其他的,在实际应用中慢慢接触吧,算是抛砖引玉吧。
loadImage需要传入图片url和一个ImageLoadingListener实例即可。

ImageLoader.getInstance().loadImage(imageUrl,new SimpleImageLoadingListener(){
            @Override
            public void onLoadingComplete(String imageUri, View view,
                                          Bitmap loadedImage) {
                super.onLoadingComplete(imageUri, view, loadedImage);
                mImageView.setImageBitmap(loadedImage);
            }
        });

下面是MainActivity完整代码:

package mungo.org.myapplication;

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

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;


public class MainActivity extends Activity {
    private static final String LOG_TAG = MainActivity.class.getSimpleName();

    ImageView mImageView;

    String imageUrl = "http://img5.imgtn.bdimg.com/it/u=747474479,3247936386&fm=21&gp=0.jpg";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e(LOG_TAG, "onCreate");

        mImageView= (ImageView) findViewById(R.id.imageView);

        ImageLoader.getInstance().loadImage(imageUrl,new SimpleImageLoadingListener(){
            @Override
            public void onLoadingComplete(String imageUri, View view,
                                          Bitmap loadedImage) {
                super.onLoadingComplete(imageUri, view, loadedImage);
                mImageView.setImageBitmap(loadedImage);
            }
        });

    }

    @Override
    protected void onStart() {
        Log.e(LOG_TAG, "onStart");
        super.onStart();
    }
    @Override
    protected void onResume() {
        Log.e(LOG_TAG, "onResume");
        super.onResume();
    }
    @Override
    protected void onPause() {
        Log.e(LOG_TAG, "onPause");
        super.onPause();
    }
    @Override
    protected void onStop() {
        Log.e(LOG_TAG, "onStop");
        super.onStop();
    }
    @Override
    protected void onDestroy() {
        Log.e(LOG_TAG, "onDestroy ");
        super.onDestroy();
    }
}

6.效果

以上代码就全部完成,看下效果。
这里写图片描述

总结

这里只是对universal-image-loader做了最简单的使用介绍,他的功能远不止这些,而且在实际运用中代码可能也不会这么写,而是采用universal-image-loader框架本身更为高效的做法。同时,这里也没涉及到框架的缓存。等等这些只能在使用中慢慢熟悉了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值