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...