Crazy Android

参考了这篇文章,对原作者感谢。

优秀无需多说,github项目地址:https://github.com/nostra13/Android-Universal-Image-Loader。

其主要特征:

简单使用:

1.新建一个Android appication.名字叫IApplicaiton.

2.把下载下来的项目里的sample里的libs下的jar拷贝到此项目中。

3.新建一个类MyApplicaiton继承application:

package com.example.iapplication;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import android.app.Application;public class MyApplication extends Application { @Overridepublic void onCreate() {super.onCreate();//创建默认的ImageLoader配置参数ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);//Initialize ImageLoader with configuration.ImageLoader.getInstance().init(configuration);} }4.配置mainfest.xml文件:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android=""package="com.example.iapplication"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="18" /> <uses-permission android:name="android.permission.INTERNET" /><!– Include next permission if you want to allow UIL to cache images on SD card –><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><applicationandroid:name="MyApplication"android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.example.iapplication.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>注意application节点和权限的加入。

接下来,加载图片。

5.定义一个layout布局:

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android=""android:layout_width="fill_parent"android:layout_height="fill_parent"><ImageViewandroid:layout_gravity="center"android:id="@+id/image"android:src="@drawable/ic_empty"android:layout_width="wrap_content"android:layout_height="wrap_content" /></FrameLayout>6.使用displayImage()加载图片:

//使用displayImage方法加载public void advanceLoad2(){final ImageView mImageView = (ImageView) findViewById(R.id.image);String imageUrl = "";//显示图片的配置DisplayImageOptions options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_stub).showImageOnFail(R.drawable.ic_error).cacheInMemory(true).cacheOnDisk(true).bitmapConfig(Bitmap.Config.RGB_565).build();ImageLoader.getInstance().displayImage(imageUrl, mImageView, options); }搞定。如果有需要显示加载图片进度的话,只需要在displayImage()方法中传入ImageLoadingProgressListener接口就行了:

imageLoader.displayImage(imageUrl, mImageView, options, new SimpleImageLoadingListener(), new ImageLoadingProgressListener() {@Overridepublic void onProgressUpdate(String imageUri, View view, int current,int total) {}}); 加载其他资源的图片:

String imagePath = "/mnt/sdcard/image.png";String imageUrl = Scheme.FILE.wrap(imagePath);//String imageUrl = "";imageLoader.displayImage(imageUrl, mImageView, options); //图片来源于Content providerString contentprividerUrl = "content://media/external/audio/albumart/13";//图片来源于assetsString assetsUrl = Scheme.ASSETS.wrap("image.png");//图片来源于String drawableUrl = Scheme.DRAWABLE.wrap("R.drawable.image"); 当我们快速滑动GridView,ListView,我们希望能停止图片的加载,而在GridView,ListView停止滑动的时候加载当前界面的图片,这个框架当然也提供这个功能,使用起来也很简单,它提供了PauseOnScrollListener这个类来控制ListView,GridView滑动过程中停止去加载图片

listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling)); 第一个参数就是我们的图片加载对象ImageLoader, 第二个是控制是否在滑动过程中暂停加载图片,如果需要暂停传true就行了,第三个参数控制猛的滑动界面的时候图片是否加载

OutOfMemoryError

虽然这个框架有很好的缓存机制,,有效的避免了OOM的产生,一般的情况下产生OOM的概率比较小,但是并不能保证OutOfMemoryError永远不发生,这个框架对于OutOfMemoryError做了简单的catch,保证我们的程序遇到OOM而不被crash掉,但是如果我们使用该框架经常发生OOM,我们可以使用一下方式去改善。

我们在使用该框架的时候尽量的使用displayImage()方法去加载图片,loadImage()是将图片对象回调到ImageLoadingListener接口的onLoadingComplete()方法中,需要我们手动去设置到ImageView上面,displayImage()方法中,对ImageView对象使用的是Weak references,方便垃圾回收器回收ImageView对象,如果我们要加载固定大小的图片的时候,使用loadImage()方法需要传递一个ImageSize对象,而displayImage()方法会根据ImageView对象的测量值,或者android:layout_width and android:layout_height设定的值,或者android:maxWidth and/or android:maxHeight设定的值来裁剪图片

没有口水与汗水,就没有成功的泪水。

Crazy Android

相关文章:

你感兴趣的文章:

标签云: