Glide可以从多个源去加载和显示图片,同时也兼顾缓存和在做图片处理时候维护一个低内存消耗。
Add Glide
Gradle:
compile 'com.github.bumptech.glide:glide:3.7.0'
Maven:
<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>glide</artifactId>
<version>3.7.0</version>
<type>aar</type>
</dependency>
加载网络图片
Glide.with(context)
.load(url)
.into(imageView);
加载资源中图片
Glide.with(context)
.load(resourceId)
.into(imageView);
加载图片文件
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"test.jpg");
Glide.with(context)
.load(file)
.into(imageView);
从Uri中加载
Uri uri = Uri.parse("android.resource://"+context.getPackageName()+"/"+resourceId);
Glide.with(context)
.load(uri)
.into(imageView);
其他的一些方法
Glide.with(context)
.load()
.placeholder() //占位符
.error() //错误图
.crossFade() //强制显示动画
.dontAnimate() //不使用动画
.resize(width,height)
.centerCrop() //剪裁图片,填充ImageView
.fitCenter() //图片完全展示,可能不会填满ImageView
.into()
加载显示Gif
String gifUrl = "http://i.kinja-img.com/gawker-media/image/upload/s--B7tUiM5l--/gf2r69yorbdesguga10i.gif";
Glide.with(context)
.load(gifUrl)
.into(imageView);
//如果gifUrl不是一个gif,而是一个常规图片,需要引用一个额外的方法asGif().
Glide.with(context)
.load(gifUrl)
.asGif()
.error(...)
.into(imageView);
//如果只想显示Gif的第一帧,可以使用asBitmap()保证其作为一个常规的图片显示,即便这个URL是一个Gif.
Glide.with(context)
.load(gifUrl)
.asGif()
.asBitmap()
.into(imageView);
显示本地视频
String filePath = "/storage/emulated/0/Pictures/example_video.mp4";
Glide.with(context)
.load(Uri.fromFile(new File(filePath)))
内存缓存
Glide.skipMemoryCache(true); //默认会缓存到内存中,true跳过内存缓存
磁盘缓存
Glide.diskCacheStrategy(DiskCacheStrategy.NONE) //禁用磁盘缓存
.skipMemoryCache(true);
//DiskCacheStrategy.NONE 什么都不缓存
//DiskCacheStrategy.SOURCE 仅缓存原图
//DiskCacheStrategy.RESULT 仅缓存最终图片
//DiskCacheStrategy.ALL 缓存所有的图像(默认)
图片请求优先级
//Priority.LOW
//Priority.NORMAL
//Priority.HIGH
//Priority.IMMEDIATE
Glide.priority(Priority.LOW);
缩略图的两种使用方式
//直接缩略
Glide.thumbnail(0.1f) //参数为float类型,是原图的一个倍数
//缩略图独立请求
DrawableRequestBuilder<String> thumbnailRequest =
Glide.with(context)
.load(url);
Glide.with(context)
.load(url)
.thumbnail(thumbnailRequest)
.into(imageView);
Glide中的回调 Targets
SimpleTarget:
private SimpleTarget target = new SimpleTarget<Bitmap>(100,100){
@Override
public void onResourceReady(Bitmap bitmap,GlideAnimation animation){
imageview.setImageBitmap(bitmap);
}
}
Glide.with(context.getApplicationContext)
.load(url)
.asBitmap()
.into(target);
ViewTarget: Glide不支持加载图片到自定义的View中,使用ViewTarget可以帮助我们实现。
CustomView customView = (CustomView)findViewById(R.id.custom_view);
ViewTarget viewTarget = new ViewTarget<CustomView,GlideDrawable>(customView){
@Override
public void onResourceReady(GlideDrawable resource,SlideAnimation<? super GlideDrawable> glideAnimation){
This.view.setImage(resource.getCurrent());
}
};
Glide.with(context.getApplictionContext())
.load(url)
.into(viewTarget);
NotificationTarget
final RemoteView rm = new RemoteView(context.getPackageName(),R.layout.remote_view);
rv.setImageViewResource(R.id.imageView,R.mipmap.image);
NotificationCompat.Builder builder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.mipmap.icon)
.setContentTitle("Title")
.setContentText("text")
.setContent(rv)
.setPriority(NotificationCompat.PRIORITY_MIN);
final Notification notification = builder.build();
if(android.os.Build.VERSION.SDK_INT >=16){
notification.bigContentView = rv;
}
NotificationManager manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(NOTIFICATION_ID,notification);
NotificationTarget target = new NotificationTarget(
context,
rv,
R.id.remoteview_icon,
notification,NOTIFICATION_ID);
//通知栏中使用Glide加载图片
Glide.with(context).load(url).asBitmap().into(target);
AppWidget 使用Glide
public class MyWidgetProvider extends AppWidgetProvider{
private AppWidgetTarget target;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
RemoteView rv = new RemoteViews(context.getPackageName(),R.layout.custom_view);
target = new AppWidgetTarget(context,rv, R.id.custom_view_image,appWidgetIds);
Glide.with(context.getApplicationContext())
.load(url)
.asBitmap()
.into(target);
pushWidgetUpdate(target);
}
public static void pushWidgetUpdate(Context context, RemoteViews rv) {
ComponentName myWidget = new ComponentName(context, MyWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(myWidget, rv);
}
}