void onLoadFailed(Exception e, Drawable errorDrawable) 
加载失败回调,根据需求,可在当前方法中进行图片加载失败的后续操作。
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
void onLoadStarted(Drawable placeholder) 
开始加载图片,可在当前方法中进行加载图片的初始操作。比如,显示加载进度条,
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
void onResourceReady(Z resource, GlideAnimation<? super Z> glideAnimation) 
当前方法表示图片资源加载完成。
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
Drawable getCurrentDrawable()
获取当前显示的 Drawable 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
void setDrawable(Drawable drawable) 
设置 drawable 显示在当前 ImageView 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
protected abstract void setResource(Z resource) 
该方法暂时不知道用途 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

方法调用说明:

如果你只是想监听,不想修改Glide的默认行为,你可以继承任何一个Glide对ImageViewTargets的默认实现:

  • GlideDrawableImageViewTarget - 默认的Target,用于正常的加载和asGif()。(重写onResourceReady 方法后 .asGif() 可省略 )
  • BitmapImageViewTarget - 当使用asBitmap()加载时,使用的默认Target。

开始( onLoadStarted ),完成( onResourceReady ),失败( onLoadFailed )。这三个方法可视情况重写。完成方法在重写的时候需要注意 super.onResourceReady(resource, glideAnimation) 是需要保留的,其他方法中的,则可有可无。

示例代码:

Glide.with(context).load(mImageUrl).placeholder(R.drawable.default_error).into(new GlideDrawableImageViewTarget(mImageView) {
            @Override
            public void onLoadStarted(Drawable placeholder) {
            // 开始加载图片
                progressBar.setVisibility(View.VISIBLE);
            @Override
            public void onLoadFailed(Exception e, Drawable errorDrawable) {
                progressBar.setVisibility(View.GONE);
                Toast.makeText(getActivity(), "图片加载失败", Toast.LENGTH_SHORT).show();
            @Override
            public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
                super.onResourceReady(resource, glideAnimation);
                // 图片加载完成
                mImageView.setImageDrawable(resource);
                progressBar.setVisibility(View.GONE);
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

这样我们就可以在 Glide 加载图片的过程中,进行添加自己的需求逻辑了。

今天主要研究了Glide获取图片Path、Bitmap用法,相信也困扰了大家很久,我在网上也找了很久,基本没有,后来研究了下,也参考了下api文档,总结了以下几个方式:

1. 获取Bitmap:

1)在图片下载缓存好之后获取

  1. Glide.with(mContext).load(url).asBitmap().into( new SimpleTarget<Bitmap>() {
  2. @Override
  3. public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
  4. image.setImageBitmap(resource);
  5. }
  6. }); //方法中设置<span style="font-family: Arial, Helvetica, sans-serif;">asBitmap可以设置回调类型</span>
上面是简单方法,下面有全面的方法,可以完美控制:
  1. Glide.with(mContext).load(url).asBitmap().into( new Target<Bitmap>() {
  2. @Override
  3. public void onLoadStarted(Drawable placeholder) {
  4. }
  5. @Override
  6. public void onLoadFailed(Exception e, Drawable errorDrawable) {
  7. }
  8. @Override
  9. public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
  10. //TODO set bitmap
  11. }
  12. @Override
  13. public void onLoadCleared(Drawable placeholder) {
  14. }
  15. @Override
  16. public void getSize(SizeReadyCallback cb) {
  17. }
  18. @Override
  19. public void setRequest(Request request) {
  20. }
  21. @Override
  22. public Request getRequest() {
  23. return null ;
  24. }
  25. @Override
  26. public void onStart() {
  27. }
  28. @Override
  29. public void onStop() {
  30. }
  31. @Override
  32. public void onDestroy() {
  33. }
  34. });
2)通过url获取
  1. Bitmap myBitmap = Glide.with(applicationContext)
  2. .load(yourUrl)
  3. .asBitmap() //必须
  4. .centerCrop()
  5. .into( 500 , 500 )
  6. .get()
2. 获取图片缓存路径
  1. FutureTarget<File> future = Glide.with(mContext)
  2. .load( "url" )
  3. .downloadOnly( 500 , 500 );
  4. try {
  5. File cacheFile = future.get();
  6. String path = cacheFile.getAbsolutePath();
  7. } catch (InterruptedException e) {
  8. e.printStackTrace();
  9. } catch (ExecutionException e) {
  10. e.printStackTrace();
  11. }
等比例缩放 图片 在聊天列表中比较常见,而不是显示固定宽高的 图片 。最近对IM项目迁移到Androidx时,顺便升级了 glide ,发现 glide 等比例缩放 图片 出现bug(自定义 ImageView Target 实现 图片 缩放),第一次能正常 加载 ,第二次无法正常等比例缩放。原来项目是使用 glide 3.7.0,现在是使用gilde 4.11.0 (4.10.0开始支持AndroidX) 不同版本... pre是指在setXXX方法前进行的操作,如果调用preScale后又调用setScale,则前者会被覆盖,post则是在setXXX的操作执行后,(例如缩放旋转)进行的操作。一开始我在自定义的 Bitmap Transfromation中进行了 Bitmap 操作,主要是对 bitmap 进行裁剪和缩放,但是在项目运行之后抛出了。调研发现可以直接submit(int width, int height)方法直接下载目标尺寸的 bitmap 。首先,如果直接使用 glide 的链式调用会存在效果覆盖的问题。 使用 glide 加载 图片 失败后,设置 imageView ImageDrawable或者Batmip无效 如标题,一个小需求在 监听 Glide 图片 加载 失败后,直接设置 imageView 为固定背景,代码如下所示: Glide .with(ivHead).load(new Glide Url(headUrl, headers)) .addListener(new RequestListener<Drawable>() { @Overr Android开发中, Bitmap 是经常会遇到的对象,特别是在列表 图片 展示、大图显示等界面。而 Bitmap 实实在在是内存使用的“大客户”。如何更好的使用 Bitmap ,减少其对App内存的使用,是Android优化方面不可回避的问题。因此,本文从常规的 Bitmap 使用,到 Bitmap 内存计算进行了介绍,最后分析了 Bitmap 的源码和其内存模型在不同版本上的变化。 Bitmap 的使用 一般来说,一个对... 引发场景:使用 Glide 加载 高清大图的时候,在 加载 过程中,显示一个 加载 进度条, 加载 结束之后,取消进度条。 Glide ImageView Target API相关方法介绍: void onLoadCleared(Drawable placeholder) 加载 时调用生命周期回调,取消了和它的资源释放。一般情况不需要我们操作。void onLoadFailed(Exception e, Drawab glide 利用View Target 解决 加载 ImageView 闪烁的问题 由于需求的原因,无法使用placeholder设置占位图,只能在 监听 图片 加载 失败后,设置 图片 的背景等在做一些其他的操作。但是存在一个问题,即 加载 失败的url由于没有缓存,如果下次刷新还是 加载 失败的话,明明 监听 的是失败的回调逻辑,但是设置的默认背景图还是会闪一下。代码如下。 Glide .with(iv).load(url) .addListener(new RequestListener<Drawa 目前在android项目上, 图片 加载 库有很多选择, Glide 是主流的 加载 库之一,作为一个被google推荐的开源库,它有着跟随页面周期、支持gif和webp、支持多种数据源等特点,并且使用起来很简单,本篇文章将会分析 Glide 加载 流程,但是 Glide 的源码比较复杂,我将从 Glide 的最简单使用分析 Glide 是如何去 加载 一张 图片 的。(一)从 Glide .with(context)入手 Glide .wi... 大家好,今天我们继续学习 Glide 。在上一篇文章当中,我带着大家一起深入探究了 Glide 的缓存机制,我们不光掌握了 Glide 缓存的使用方法,还通过源码分析对缓存的工作原理进行了了解。今天是这个 Glide 系列的第四篇文章,我们又要选取一个新的功能模块开始学习了,那么就来研究一下 Glide 的回调和 监听 功能吧。今天的学习模式仍然是以基本 用法 和源码分析相结合的方式来进行的 在 Android 通过 JNI 去调用 Bitmap ,通过 CMake 去编 so 动态链接库的话,需要添加 jnigraphics 图像库。 target _link_libraries( # Specifies the target library. native-operation         .placeholder(R.mipmap.mine_placehold)         .dontAnimate() 2:使用 Glide 加载 图片 获取 bitmap 转为为string是报错 一、简介这一小节讲一下 Glide 4指定 图片 大小显示的方法,实际上,使用 Glide 在大多数情况下我们都是不需要指定 图片 大小的,因为 Glide 会自动根据 ImageView 的大小来决定 图片 的大小,以此保证 图片 不会占用过多的内存从而引发OOM。不过,如果你真的有这样的需求,必须给 图片 指定一个固定的大小, Glide 仍然是支持这个功能的。非常简单,下面直接上代码就ok了!二、指定固定尺寸这里使用overrid...