if (null == convertView) {
// .....
}
Glide.with(context).load(imageUrls[position]).into(holder.imageView);
return convertView;
}
(2)如果使用的是RecyclerView,可以在Adapter的onBindViewHolder方法中使用: public void onBindViewHolder(RVViewHolder holder, int position) {
Glide.with(MainActivity.this)
.load(args[position])
.into(holder.imageView);
}
(3) 当加载网络图片时,由于加载过程中图片未能及时显示,此时可能需要设置等待时的图片,通过placeHolder()方法:Glide.with(context).load(UsageExampleListViewAdapter.eatFoodyImages[0])
.placeholder(R.mipmap.ic_launcher) // can also be a drawable
.into(imageViewPlaceholder);
(4) 当加载图片失败时,通过error(Drawable drawable)方法设置加载失败后的图片显示:Glide.with(context).load("http://futurestud.io/non_existing_image.png")
.error(R.mipmap.future_studio_launcher)
.into(imageViewError);
(5) 图片的缩放,centerCrop()和fitCenter():// 使用centerCrop是利用图片图填充ImageView设置的大小,如果ImageView的 Height是match_parent则图片就会被拉伸填充
Glide.with(MainActivity.this).load(args[position]).centerCrop()
.into(holder.imageView);
// 使用fitCenter即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围该图像将会完全显示,但可能不会填满整个 ImageView。
Glide.with(MainActivity.this).load(args[position]).fitCenter()
.into(holder.imageView);
(6)显示gif动画:Glide.with(context).load(gifUrl).asGif() // 判断加载的url资源是否为gif格式的资源
.error(R.drawable.full_cake).into(imageViewGif);
(7)显示本地视:String filePath = "/storage/emulated/0/Pictures/example_video.mp4";
Glide.with(context).load(Uri.fromFile(new File(filePath)))
.into(imageViewGifAsBitmap);
(8)缓存策略:Glide
.with( context )
.load( Images[0] )
.skipMemoryCache( true ) //跳过内存缓存
.into( imageViewInternet );
Glide.with(context).load(images[0])
.diskCacheStrategy(DiskCacheStrategy.NONE) // 跳过硬盘缓存
.into(imageViewInternet);
DiskCacheStrategy.NONE
什么都不缓存DiskCacheStrategy.SOURCE
仅仅只缓存原来的全分辨率的图像DiskCacheStrategy.RESULT
仅仅缓存最终的图像,即降低分辨率后的(或者是转换后的)DiskCacheStrategy.ALL
缓存所有版本的图像(默认行为)
Priority.LOW
Priority.NORMAL
Priority.HIGH
Priority.IMMEDIATE
Glide.with(context).load(mages[0]).priority(Priority.HIGH)
.into(imageViewHero);
}
private void loadImagesWithLowPriority() {
Glide.with(context).load(images[1]).priority(Priority.LOW)
.into(imageViewLowPrioLeft);
Glide.with(context).load(images[2]).priority(Priority.LOW)
.into(imageViewLowPrioRight);
}
(10) 当不需要将加载的资源直接放入到ImageView中而是想获取资源的Bitmap对象://括号中的300,600代表宽和高但是未有作用
SimpleTarget target = new SimpleTarget<Bitmap>(300,600) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap>glideAnimation) {
holder.imageView.setImageBitmap(resource);
}
};
Glide.with(MainActivity.this)
.load(args[position])
.asBitmap()
.into(target);
(11)集成网络栈(okHttp,Volley): dependencies {
// your other dependencies
// ...
// Glide
compile 'com.github.bumptech.glide:glide:3.6.1'
// Glide's OkHttp Integration
compile 'com.github.bumptech.glide:okhttp-integration:1.3.1@aar'
compile 'com.squareup.okhttp:okhttp:2.5.0'
}
dependencies {
// your other dependencies
// ...
// Glide
compile 'com.github.bumptech.glide:glide:3.6.1'
// Glide's Volley Integration
compile 'com.github.bumptech.glide:volley-integration:1.3.1@aar'
compile 'com.mcxiaoke.volley:library:1.0.8'
}
(12)规范使用:
Glide使用起来很简单,而且不需要任何特别的配置就自动包含了bitmap pooling 。
DrawableRequestBuilder requestBuilder = Glide.with(context).load(imageUrl);
requestBuilder.into(imageView);
这就是加载一张图片的全部要求。就像安卓中的很多地方一样,with() 方法中的context到底是哪种类型是不清楚的。有一点很重要需要记住,就是传入的context类型影响到Glide加载图片的优化程度,Glide可以监视activity的生命周期,在activity销毁的时候自动取消等待中的请求。但是如果你使用Application context,你就失去了这种优化效果。
Glide.with(context)
.load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
.into(ivImg);
(13)优化特性
类似的是,如果相关的item已经滚出了屏幕的范围,Glide会自动取消列表中的悬着的图片请求 。因为绝大多数开发者都会在adapter中利用view的回收,Glide做到这点是通过在ImageView上设置一个tag,在加载另外一张图片之前检查这个tag,如果存在就取消第一次请求。
Glide提供了几个让你感觉图片加载速度变快的特性。第一个就是在图片显示在屏幕上之前就预先取出图片。它提供了一个ListPreloader类, 它被应该事先取出的item数目实例化。然后通过setOnScrollListener(OnScrollListener).被传递给ListView。你想在ListView之外也能预先取出图片吗?没问题,使用前面的builder对象就可以了,只需调用builder.downloadOnly()。
downloadOnly见:https://github.com/bumptech/glide/wiki/Loading-and-Caching-on-Background-Threads 。