- 1.添加依賴(lài)包:
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
- 2.添加權(quán)限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_img1"
android:layout_width="250dp"
android:layout_height="150dp"
android:layout_marginTop="5dp"/>
<ImageView
android:id="@+id/iv_img2"
android:layout_width="250dp"
android:layout_height="150dp"
android:layout_marginTop="10dp"/>
<ImageView
android:id="@+id/iv_img3"
android:layout_width="300dp"
android:layout_height="200dp"
/>
<ImageView
android:id="@+id/iv_img4"
android:layout_width="250dp"
android:layout_height="150dp"
/>
</LinearLayout>
</ScrollView>
MainActivity.java
public class MainActivity extends Activity {
private ImageView mImageView1, mImageView2, mImageView3, mImageView4;
private DisplayImageOptions mOptions1, mOptions2, mOptions3, mOptions4;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_loader);
initView();
initData();
}
private void initData() {
String uri = "http://pic51.nipic.com/file/20141027/11284670_094822707000_2.jpg";
ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
ImageLoader.getInstance().init(configuration);
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnFail(R.mipmap.ic_launcher)
.showImageOnLoading(R.mipmap.ic_launcher)
.cacheInMemory(true)
.cacheOnDisk(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.displayer(new CircleBitmapDisplayer())
.build();
ImageLoader.getInstance().displayImage(uri, mImageView1, options);
//顯示圓形圖片叠纷,使用該效果,必須在布局中顯式指定顯示圖片控件的寬高
mOptions1 = new DisplayImageOptions.Builder()
.showImageOnFail(R.mipmap.ic_launcher)
.showImageOnLoading(R.mipmap.ic_launcher)
.cacheInMemory(true)
.cacheOnDisk(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.displayer(new CircleBitmapDisplayer())
.build();
ImageLoader.getInstance().displayImage(uri, mImageView1, mOptions1);
//顯示圓角圖片扒寄,使用該效果,必須在布局中顯式指定顯示圖片控件的寬高
mOptions2 = new DisplayImageOptions.Builder()
.cacheOnDisk(true)
.cacheOnDisk(true)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.showImageOnFail(R.mipmap.ic_launcher)
.bitmapConfig(Bitmap.Config.RGB_565)
.displayer(new RoundedBitmapDisplayer(90))
.build();
ImageLoader.getInstance().displayImage(uri, mImageView2, mOptions2);
//圓角縮放圖片圖片嗓违,使用該效果,必須在布局中顯式指定顯示圖片控件的寬高
mOptions3 = new DisplayImageOptions.Builder()
.cacheOnDisk(true)
.cacheOnDisk(true)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.showImageOnFail(R.mipmap.ic_launcher)
.bitmapConfig(Bitmap.Config.RGB_565)
.displayer(new RoundedVignetteBitmapDisplayer(200, 100))
.build();
ImageLoader.getInstance().displayImage(uri, mImageView3, mOptions3);
//漸顯圖片
mOptions4 = new DisplayImageOptions.Builder()
.cacheOnDisk(true)
.cacheOnDisk(true)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.showImageOnFail(R.mipmap.ic_launcher)
.bitmapConfig(Bitmap.Config.RGB_565)
.displayer(new FadeInBitmapDisplayer(5000))
.build();
ImageLoader.getInstance().displayImage(uri, mImageView4, mOptions4);
}
private void initView() {
mImageView1 = (ImageView) findViewById(R.id.iv_img1);
mImageView2 = (ImageView) findViewById(R.id.iv_img2);
mImageView3 = (ImageView) findViewById(R.id.iv_img3);
mImageView4 = (ImageView) findViewById(R.id.iv_img4);
}
}
ImageLoaderConfiguration 詳細(xì)配置
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.memoryCacheExtraOptions(480, 800) // 指定緩存到內(nèi)存時(shí)圖片的大小,默認(rèn)是屏幕尺寸的長(zhǎng)寬
.diskCacheExtraOptions(480, 800, null) // 指定緩存到硬盤(pán)時(shí)圖片的大小,并不建議使用
.taskExecutor(new Executor()) // 自定義一個(gè)線(xiàn)程來(lái)加載和顯示圖片
.taskExecutorForCachedImages(new Executor())// 自定義一個(gè)線(xiàn)程來(lái)緩存圖片
.threadPoolSize(3) // default, 指定線(xiàn)程池大小
.threadPriority(Thread.NORM_PRIORITY - 2) // default ,指定線(xiàn)程優(yōu)先級(jí)
.tasksProcessingOrder(QueueProcessingType.FIFO) // default , 指定加載顯示圖片的任務(wù)隊(duì)列的類(lèi)型
.denyCacheImageMultipleSizesInMemory() // 禁止在內(nèi)存中緩存同一張圖片的多個(gè)尺寸類(lèi)型
.memoryCache(new LruMemoryCache(2 * 1024 * 1024)) // 指定內(nèi)存緩存的大小,默認(rèn)值為1/8 應(yīng)用的最大可用內(nèi)存
.memoryCacheSize(2 * 1024 * 1024)
.memoryCacheSizePercentage(13) // default
.diskCache(new UnlimitedDiskCache(cacheDir)) // default , 指定硬盤(pán)緩存的地址
.diskCacheSize(50 * 1024 * 1024) // 指定硬盤(pán)緩存的大小
.diskCacheFileCount(100) // 指定硬盤(pán)緩存的文件個(gè)數(shù)
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default , 指定硬盤(pán)緩存時(shí)文件名的生成器
.imageDownloader(new BaseImageDownloader(context)) // default , 指定圖片下載器
.imageDecoder(new BaseImageDecoder()) // default , 指定圖片解碼器
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default , 指定圖片顯示的配置
.writeDebugLogs() // 是否顯示Log
.build();
DisplayImageOptions 參數(shù)詳解:
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub) // 圖片正在加載時(shí)顯示的圖片資源ID
.showImageForEmptyUri(R.drawable.ic_empty) // URI為空時(shí)顯示的圖片資源ID
.showImageOnFail(R.drawable.ic_error) // 圖片加載失敗時(shí)顯示的圖片資源ID
.resetViewBeforeLoading(false) // default 圖片在下載前是否重置,復(fù)位
.delayBeforeLoading(1000) // 圖片開(kāi)始加載前的延時(shí).默認(rèn)是0
.cacheInMemory(false) // default , 是否緩存在內(nèi)存中, 默認(rèn)不緩存
.cacheOnDisk(false) // default , 是否緩存在硬盤(pán) , 默認(rèn)不緩存
.preProcessor(new BitmapProcessor) // 設(shè)置圖片緩存在內(nèi)存前的圖片處理器
.postProcessor(new BitmapProcessor) // 設(shè)置圖片在緩存到內(nèi)存以后 , 顯示在界面之前的圖片處理器
.extraForDownloader(...) // 為圖片下載設(shè)置輔助參數(shù)
.considerExifParams(false) // default , 設(shè)置是否考慮JPEG圖片的EXIF參數(shù)信息,默認(rèn)不考慮
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default , 指定圖片縮放的方式,ListView/GridView/Gallery推薦使用此默認(rèn)值
.bitmapConfig(Bitmap.Config.ARGB_8888) // default , 指定圖片的質(zhì)量,默認(rèn)是 ARGB_8888
.decodingOptions(...) // 指定圖片的解碼方式
.displayer(new SimpleBitmapDisplayer()) // default , 設(shè)置圖片顯示的方式,用于自定義
.handler(new Handler()) // default ,設(shè)置圖片顯示的方式和ImageLoadingListener的監(jiān)聽(tīng), 用于自定義
.build();
運(yùn)行結(jié)果: