Glide--Target
来源:互联网 发布:微信软件介绍 编辑:程序博客网 时间:2024/06/06 14:38
Glide不但可以把图片、视频剧照、GIF动画加载到View,还可以加载到自定义的Target实现中。Target就是使用Glide获取到资源之后资源作用的目标,我们通常是用Glide加载完资源后显示到ImageView中,这个ImageView就是目标。
Target架构的接口包括:
- com.bumptech.glide.manager.LifecycleListener
- com.bumptech.glide.request.target.Target<R>
- com.bumptech.glide.request.target.SizeReadyCallback
Target架构的类层次:
- com.bumptech.glide.request.target.BaseTarget<Z> (implements com.bumptech.glide.request.target.Target<R>)
- com.bumptech.glide.request.target.SimpleTarget<Z>
- com.bumptech.glide.request.target.AppWidgetTarget
- com.bumptech.glide.request.target.NotificationTarget
- com.bumptech.glide.request.target.PreloadTarget<Z>
- com.bumptech.glide.request.target.ViewTarget<T,Z>
- com.bumptech.glide.request.target.ImageViewTarget<Z> (implements com.bumptech.glide.request.animation.GlideAnimation.ViewAdapter)
- com.bumptech.glide.request.target.BitmapImageViewTarget
- com.bumptech.glide.request.target.DrawableImageViewTarget
- com.bumptech.glide.request.target.GlideDrawableImageViewTarget
- com.bumptech.glide.request.target.ImageViewTarget<Z> (implements com.bumptech.glide.request.animation.GlideAnimation.ViewAdapter)
- com.bumptech.glide.request.target.SimpleTarget<Z>
- android.graphics.drawable.Drawable
- com.bumptech.glide.load.resource.drawable.GlideDrawable (implements android.graphics.drawable.Animatable)
- com.bumptech.glide.request.target.SquaringDrawable
- com.bumptech.glide.load.resource.drawable.GlideDrawable (implements android.graphics.drawable.Animatable)
- com.bumptech.glide.request.target.ImageViewTargetFactory
SimpleTarget
如果你只是想通过Glide加载一个Bitmap而不是把它显示到View中,比如想显示到通知栏里、作为上传头像等,Glide为你提供了灵活的接口SimpleTarget<Z>
:SimpleTarget
相对于上层接口Target
提供了合理的默认实现,以便让你专注于处理已加载好的资源。
使用SimpleTarget,你需要提供你需要资源的宽高值(像素)到SimpleTarget构造器,并实现onResourceReady(T resource, GlideAnimation animation)
方法:
int myWidth = 512;int myHeight = 384;Glide.with(yourApplicationContext)) .load(youUrl) .asBitmap() .into(new SimpleTarget<Bitmap>(myWidth, myHeight) { @Override public void onResourceReady(Bitmap bitmap, GlideAnimation anim) { // Do something with bitmap here. } };
可能你已经注意到了,上面用的上下文是应用上下文ApplicationContext。因为通常我们把资源加载到View中,当fragment或activity暂停或销毁时,Glide也会暂停或取消请求,以确保不会浪费时间和资源在你不需要的显示上。
但对SimpleTarget来说,并没有生命周期,所以调用Glide.with(context)
时传application上下文,而不是fragment或activity。
同时,考虑到长时间运行的操作可能会导致内存泄露,如果你要执行长时间运行的操作,要用静态内部类,而不是匿名内部类。
ViewTarget
如果你在加载资源到View时想要查看或覆盖某些Glide默认行为时,可以重写ViewTarget
或它的子类。
通常情况下你想要Glide决定你View的大小时用ViewTarget作为基类即可, 但当你想要处理开始动画或者把资源显示到自定义View中时,ViewTarget子类就特别的合适了,尤其是通过Glide内置的ImageViewTarget 和其子类显示ImageView出问题时。
ViewTarget使用:可以创建静态的子类,或者匿名内部类方式创建:
Glide.with(yourFragment) .load(yourUrl) .into(new ViewTarget<YourViewClass, GlideDrawable>(yourViewObject) { @Override public void onResourceReady(GlideDrawable resource, GlideAnimation anim) { YourViewClass myView = this.view; // 把资源设置到myView,开始播放动画 } });
注意:如果你想指定加载Bitmap或GifDrawable,必须在.load(yourUrl)
之后马上调用 .asBitmap()
或.asGif()
,并且把ViewTarget参数中的类型替换成你要加载的类型。
可以实现LifecycleListener
接口以便根据生命周期进行各种操作。
如果你只是想查看而不是改变Glide的默认行为,可以使用ImageViewTarget的两个子类:
- GlideDrawableImageViewTarget - 正常加载和使用asGif()进行加载的默认目标.
- BitmapImageViewTarget - 使用asBitmap()进行加载的默认目标.
如:
Glide.with(yourFragment) .load(yourUrl) .asBitmap() .into(new BitmapImageViewTarget(yourImageView)) { @Override public void onResourceReady(Bitmap bitmap, GlideAnimation anim) { super.onResourceReady(bitmap, anim); Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() { @Override public void onGenerated(Palette palette) { // Here's your generated palette } }); } });
- Glide-Target
- Glide--Target
- Glide之Target
- Glide之Target
- 玩转Glide的Target对象
- Glide加载图片into(Target)导致OOM异常
- glide
- Glide
- Glide
- glide
- Glide
- Glide
- Glide
- Glide
- glide
- Glide
- Glide
- Glide
- 如何使用Photoshop在PSD文件上切图
- Redy语法分析--位运算符(<< >> & ^ | )
- Redis的安装和部署
- 《代码整洁之道》(《Clean Code》)读书笔记
- 圆圈中最后剩下的数字
- Glide--Target
- c语言高级---内存对齐
- 二维码图片下载,补充前面的文章
- 自定义浏览器滚动条的样式
- 百度地图:加强篇(定位)
- 把数组排成最小的数
- Maven项目报错:Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clea
- Redis命令操作详解
- Redy语法分析--比较运算符(> >= < <= != == )