初步使用universal-image-loader

来源:互联网 发布:淘宝助理安全验证 编辑:程序博客网 时间:2024/05/16 09:13

简介

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
原创粉丝点击