当前位置: 代码迷 >> 综合 >> Android之ImageLoader(demo)
  详细解决方案

Android之ImageLoader(demo)

热度:73   发布时间:2023-10-20 02:21:11.0
Android之ImageLoader(demo)
上一篇文章已经对ImageLoader简单介绍了,下面主要是通过一个demo来了解ImageLoader,通过ImageLoader来加载本地的一张图片.
首先,我们要引进ImageLoader的jar包,或者关联库,并新建一个类,用来初始化,这是必须要做的:
<span style="font-size:18px;">package com.example.imageloaderdm;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;import android.app.Application;
import android.content.Context;public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();initImageLoader(this);}public static void initImageLoader(Context context) {// This configuration tuning is custom. You can tune every option, you may tune some of them,// or you can create default configuration by
//		  ImageLoaderConfiguration.createDefault(this);// method.ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);config.threadPriority(Thread.NORM_PRIORITY - 2);config.denyCacheImageMultipleSizesInMemory();//不会在内存中缓存多个大小的图??config.diskCacheFileNameGenerator(new Md5FileNameGenerator());//为了保证图片名称唯一config.diskCacheSize(50 * 1024 * 1024); // 50 MiB//内存缓存大小默认是:app可用内存??1/8config.tasksProcessingOrder(QueueProcessingType.LIFO);config.writeDebugLogs(); // Remove for release app// Initialize ImageLoader with configuration.ImageLoader.getInstance().init(config.build());
//		ImageLoader.getInstance().init( ImageLoaderConfiguration.createDefault(this));}
}
</span>
注意:我们继承的是Application,调用了onCreate方法。initImageLoader(this);这是初始化。
如果你不是加载的本地文件,必须在清单文件中加上权限:
<uses-permission android:name="android.permission.INTERNET"/>


第二步: 我们再新建一个类ImageLoaderOptions,主要的作用是存储图片,一种是正常的存储,一种是通过缩放减小图片大小的存储,防止OOM异常。
<span style="font-size:18px;">package com.example.imageloaderdm;import android.graphics.Bitmap;import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;public class ImageLoaderOptions {public static DisplayImageOptions list_options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_default).showImageForEmptyUri(R.drawable.ic_default).showImageOnFail(R.drawable.ic_default).cacheInMemory(true)// 在内存中会缓存该图片.cacheOnDisk(true)// 在硬盘中会缓存该图片.considerExifParams(true)// 会识别图片的方向信息.displayer(new FadeInBitmapDisplayer(500)).build();// .displayer(new RoundedBitmapDisplayer(10)).build();;public static DisplayImageOptions pager_options = new DisplayImageOptions.Builder().showImageForEmptyUri(R.drawable.ic_default).showImageOnFail(R.drawable.ic_default).resetViewBeforeLoading(true)//在显示图片之前先清空ImageView上的图片.cacheOnDisk(true).imageScaleType(ImageScaleType.EXACTLY)//会对图片进一步的缩放.bitmapConfig(Bitmap.Config.RGB_565)//此种模消耗的内存会很??,2个byte存储??个像??.considerExifParams(true).displayer(new FadeInBitmapDisplayer(300)).build();// .displayer(new RoundedBitmapDisplayer(10)).build();;
}
</span>

我们不难看出pager_options是通过缩放来存储图片的,这也就是我们ImageLoader的好处之一。


最后在MainActivity中加上网址,去加载一下:
<span style="font-size:18px;">package com.example.imageloaderdm;import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ImageView;import com.nostra13.universalimageloader.core.ImageLoader;public class MainActivity extends Activity {private String url = "http:192.168.2.148:8080/images/1.jpg";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ImageView iv = (ImageView) findViewById(R.id.iv);ImageLoader.getInstance().displayImage(url, iv, ImageLoaderOptions.pager_options);}}
</span>



  相关解决方案