首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么ImageView不能在使用Glide加载新图像后调整大小?

ImageView不能在使用Glide加载新图像后调整大小的原因是因为Glide加载图像是异步的过程,当调用Glide加载新图像时,ImageView的大小可能还没有被测量出来,因此无法立即调整大小。

为了解决这个问题,可以使用Glide的回调机制来监听图像加载完成的事件,然后在回调中进行ImageView的大小调整。具体步骤如下:

  1. 首先,使用Glide加载图像,并设置一个回调监听器:
代码语言:txt
复制
Glide.with(context)
    .load(imageUrl)
    .listener(new RequestListener<Drawable>() {
        @Override
        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
            return false;
        }

        @Override
        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
            // 图像加载完成后的回调
            adjustImageViewSize(imageView);
            return false;
        }
    })
    .into(imageView);
  1. 在回调方法onResourceReady()中,调用adjustImageViewSize()方法来调整ImageView的大小:
代码语言:txt
复制
private void adjustImageViewSize(ImageView imageView) {
    // 获取ImageView的宽度和高度
    int targetWidth = imageView.getWidth();
    int targetHeight = imageView.getHeight();

    // 调整ImageView的大小
    ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams();
    layoutParams.width = targetWidth;
    layoutParams.height = targetHeight;
    imageView.setLayoutParams(layoutParams);
}

通过以上步骤,当Glide加载新图像完成后,会触发回调方法onResourceReady(),然后在回调方法中调用adjustImageViewSize()方法来调整ImageView的大小,确保图像加载完成后能正确显示在ImageView中。

推荐的腾讯云相关产品:腾讯云对象存储(COS),它是一种高可用、高可靠、低成本的云端存储服务,适用于存储和处理各种类型的媒体文件。产品介绍链接地址:https://cloud.tencent.com/product/cos

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android-图片加载策略- Glide 入门和使用

Glide是毕加索图书馆的一个很好的选择。大多数功能在两者中都很常见。 Glide是谷歌推荐的流行的Android图像库,甚至Google也在各种应用程序中使用它。以下是此库的一些功能。...---- Glide图像库的特点 支持获取图像,GIF和视频静止图像。 可以添加占位符和错误图像。 支持磁盘缓存。 图像调整大小和裁剪。...Glide.with(context).load(IMAGE_URL).into(imageView); ---- 占位符和图像异常处理 您可以添加占位符图像,直到从Internet加载图像。...) .into(imageView); ---- 加载GIF 您只需添加asGif()方法即可加载gif 。...Glide.with(context) .load(IMAGE_URL) .asGif() .into(imageView); ---- 调整大小和裁剪图像 以下代码行将图像大小调整为300×300

1.3K10

Glide用法与技巧以及优秀库的推荐

所以我建议传参的时候传递Activity 和 Fragment给Glide,而不是Context。 2.Glide加载的图片质量要略差于Picasso,这又是为什么呢?...Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的。Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟。...4.Glide可以加载GIF动态图,而Picasso不能。 5.Picasso (v2.5.1)大小约为118KB,然而Glide (v3.5.2)的大小约为430KB。...).into(imageView); 4.图片的缩放,centerCrop()和fitCenter(): 1)使用centerCrop是利用图片图填充ImageView设置的大小,如果ImageView...仅仅缓存最终的图像,即降低分辨率的(或者是转换的) DiskCacheStrategy.ALL缓存所有版本的图像(默认行为) 8.优先级,设置图片加载的顺序: Glide.with(context)

70020

Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide图片缓存库的联系与区别

原因在于Picasso是加载了全尺寸的图片到内存,然后让GPU来实时重绘大小。而Glide加载大小ImageView大小是一致的,因此更小。...尝试将ImageView调整成不同大小,但不管大小如何Picasso只缓存一个全尺寸的。Glide则不同,它会为每种大小ImageView缓存一次。...尽管一张图片已经缓存了一次,但是假如你要在另外一个地方再次以不同尺寸显示,需要重新下载,调整尺寸的大小,然后将这个尺寸的也缓存起来。...); 下次在任何ImageView加载图片的时候,全尺寸的图片将从缓存中取出,重新调整大小,然后缓存。...Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟。不过各有所长。

1.3K70

Carson带你学Android:最全面解析图片加载Glide用法

前言 上文已经对当今Android主流的图片加载库进行了全面介绍 & 对比 如果你还没阅读,我建议你先移步这里进行查看 今天我们来学习一下其中一个Android主流的图片加载库的使用 - Glide...(0.1f);//设置缩略图支持:先加载缩略图 然后在加载全图 //传了一个 0.1f 作为参数,Glide 将会显示原始图像的10%的大小。...:缓存任何图片,即禁用磁盘缓存 // DiskCacheStrategy.ALL :缓存原始图片 & 转换的图片(默认) // DiskCacheStrategy.SOURCE:只缓存原始图片(原来的全分辨率的图像...,即缓存转换的图片) // DiskCacheStrategy.RESULT:只缓存转换的图片(即最终的图像:降低分辨率 / 或者转换缓存原始图片 设置跳过内存缓存 Glide .with...Picasso 只会缓存原始尺寸的图片,而 Glide 缓存的是多种规格,也就意味着 Glide 会根据你 ImageView大小来缓存相应大小的图片尺寸 比如你 ImageView 大小是200200

80520

Android图片加载开源库深度推荐,安利Fresco1、Universal-Image-Loader2、Picasso3、Glide4、Fresco

1、Universal-Image-Loader 1W多的star,无需置疑它的受欢迎程度,简单易上手,小喵我第一个使用的图片加载库就是它,适用于所有的Imageview,结合LruCache和DiskLurCache...Glide也是支持“所有”的ImageView使用过程中十分流畅,这里推荐两个库: GlidePalette 一个可以在Glide加载时很方便使用Palette的库。...glide-transformations 处理各种图片显示效果的,先看下面的图片。为什么着重推荐这个,因为如果是用的是圆形的ImageView或者特殊裁剪的什么,那么很可能会有问题。 什么问题?...transformations 其他需要注意的,比如不能在非主线程下调用Glide加载图片。...setTag要使用SimpleTarget或者继承GlideModule,可以配置成OKHttp来替代请求等等等等等。 聪明的你一定知道了,因为我要说Fresco,那么为什么不用Glide了呢?

1.4K20

Android Glide使用姿势与原理分析

(imageView) 图片压缩 Glide通过根据目标ImageView大小和ScaleType来计算图片的实际大小,并进行压缩。...图片缓存 Glide使用双缓存策略来管理图片缓存。它在内存中缓存未经压缩的原始图片,提升加载速度,同时还会将压缩的图片存储在磁盘中,节省内存和流量。 Glide的缓存机制非常智能。...此外,Glide支持自定义缓存的大小和有效期 ,以适应不同需求。 Glide的缓存机制是其优秀性能的关键之一。通过内存缓存和磁盘缓存的组合,它能够高效地管理已加载图像数据,从而提高后续加载的速度。...内存缓存 Glide使用内存缓存来存储最近使用图像数据,以便快速访问。内存缓存基于LRU(Least Recently Used,最近最少使用)算法,保留最近加载图像数据。...当活动资源缓存已满时,Glide会将不再活跃的图片从活动缓存中移至未活动资源缓存,以腾出空间供图片使用。 缓存策略 Glide允许开发者根据需求设置不同的缓存策略。

54420

Google推荐的图片加载Glide介绍

Glide加载大小ImageView大小是一致的,因此更小。...Glide则不同,它会为每种大小ImageView缓存一次。尽管一张图片已经缓存了一次,但是假如你要在另外一个地方再次以不同尺寸显示,需要重新下载,调整尺寸的大小,然后将这个尺寸的也缓存起来。...而Glide加载大小ImageView大小是一致的,因此更小。...Glide则不同,它会为每种大小ImageView缓存一次。尽管一张图片已经缓存了一次,但是假如你要在另外一个地方再次以不同尺寸显示,需要重新下载,调整尺寸的大小,然后将这个尺寸的也缓存起来。...而Glide加载大小ImageView大小是一致的,因此更小。

79920

【Android从零单排系列九】《Android视图控件——ImageView

:同上,缩放后放右下角 fitXY:对图像横纵方向进行独立缩放,使得该图片安全适应imageview,但图片宽高比可能发生改变 center:保持原图大小,显示在中心,当原图大小大于imageview大小...显示图片的几种方法简要分析_再见孙悟空_的博客-CSDN博客 四.图片加载框架 1.图片加载框架 imageloader picasso Glide Fresco ImageLoader:旨在为图像加载...他提供了大量的配置选项和良好的控制图像加载和缓存过程。...2.图片框架ImageLoader,Picasso,Fresco,Glide对比 ImageLoader 比较老的框架,稳定,加载速度适中,缺点在于不支持GIF图片加载使用稍微繁琐,并且缓存机制没有和...并且默认使用ARGB_8888格式缓存图片,缓存体积大 Glide 支持GIF图片的加载,图片缓存也会自动缩放,默认使用RGB_565格式缓存图片,是Picasso缓存体积的一半 Fresco 优点:

1.2K30

android图片加载Glide

默认的Bitmap格式是RGB_565 一下是Picasso和Glide加载的结果(1920x1080 像素的图片被加载到768x432像素的imageview中): ?...你可以看到,被Glide加载的图片在质量上不如Picasso加载的图片,这是为什么?...当我们调整imageview大小时,Picasso会不管imageview大小是什么,总是直接缓存整张图片,而Glide就不一样了,它会为每个不同尺寸的Imageview缓存一张图片,也就是说不管你的这张图片有没有加载过...,就是它可以加快图片加载的速度(可以理解为以空间换时间),而Picasso会造成一定的延迟,因为它在加载imageview的时候,总是需要调整大小,确实Picasso有一个立即显示图片的方法(如下所示...gif的缓存和一般的图片也是一样的,也是第一次加载的时候调整大小,然后缓存。 但是,要注意的是,通过测量,我们可以发现gif图片将消耗非常多的内存,因此使用它的时候要慎重。

1.8K60

Android开发笔记(一百七十一)使用Glide加载网络图片

implementation 'com.github.bumptech.glide:glide:4.11.0' 导包完成之后,即可在代码中正常使用Glide。...3、准备显示网络图片的图像视图实例,参数类型为ImageView。...).load(mImageUrl).into(iv_network); 如果指定图像视图的拉伸类型,Glide默认采用FIT_CENTER方式显示图片,相当于在load方法和into方法中间增加调用fitCenter...虽然Glide支持上述四种显示类型,但它无法设定FIT_XY对应的平铺方式,若想让图片平铺至充满整个图像视图,还得调用图像视图的setScaleType方法,将拉伸类型设置为ImageView.ScaleType.FIT_XY...);         builder.into(iv_network); // 在图像视图上展示网络图片 原来load方法返回的是请求建造器,调用建造器对象的into方法,方能在图像视图上展示网络图片。

3.6K20

Android将Glide动态加载不同大小的图片切圆角与圆形的方法

Glide加载动态图片 首先我们先要去依赖一个githup:bumptech:glide:glide:3.7.0包; 使用Glide结合列表的样式进行图片加载: 1) 如果使用的是ListView,...) .load(args[position]) .centerCrop() .into(holder.imageView); //使用fitCenter即缩放图像图像都测量出来等于或小于...DiskCacheStrategy.RESULT 仅仅缓存最终的图像,即降低分辨率的(或者是转换的) DiskCacheStrategy.ALL 缓存所有版本的图像(默认行为) 9) 优先级,设置图片加载的顺序...,但这些都不能解决上面的问题 怎样能 Glide动态加载不同大小的图片切圆形图片跟圆角图片呢?...解决很简单 既然是图片大小不一致而导致图片切出来不一样,那就把图片变的一样大小不就可以吗 申明一下我的代码也是在Glide动态加载圆形图片跟圆角图片搜出来的代码基础上修改的.

3.4K20

Android图片加载库:最全面解析Glide用法

前言 上文已经对当今Android主流的图片加载库进行了全面介绍 & 对比 如果你还没阅读,我建议你先移步这里进行查看 今天我们来学习一下其中一个Android主流的图片加载库的使用 - Glide...(0.1f);//设置缩略图支持:先加载缩略图 然后在加载全图 //传了一个 0.1f 作为参数,Glide 将会显示原始图像的10%的大小。...然而,默认的它将仍然使用内存缓存! //SOURCE:仅缓存源资源(原来的全分辨率的图像)。...//在我们上面略缩图的例子中,将会只有一个1000x1000 像素的图片 //RESULT:缓存转换的资源(最终的图像,即降低分辨率的(或者是转换的) 设置跳过内存缓存 Glide .with...Picasso 只会缓存原始尺寸的图片,而 Glide 缓存的是多种规格,也就意味着 Glide 会根据你 ImageView大小来缓存相应大小的图片尺寸 比如你 ImageView 大小是200

3.3K10

glide 一个强大的图片加载框架

转载请注明出处 作者:developerHaoz Github 地址:developerHaoz 本文的主要内容 glide 是什么 glide 的基本使用 glide 最核心的三个方法 glide...常用的方法 一、glide 是什么 glide 是一个强大的 ImageLoader,在图片加载库烂大街的今天,选择一个适合我们自己使用的图片加载库无疑能调高我们的开发效率,此外还能让我们写的 APP...福利.gif 可以看到图片加载的速度是非常快的,基本上是瞬间加载完成的(别问我为什么加载妹子的图片,我乐意) 3、最后别忘了加载网络图片需要加上网络权限 <uses-permission android...、DiskCacheStrategy.RESULT:仅仅缓存最终的图像 DiskCacheStrategy.ALL:缓存所有版本的图像(默认行为) error() 当我们因为某些异常情况导致图片加载失败...glide 从来不会直接将图片的完整尺寸全部加载到内存中,而是用多少加载多少,如果我们真的有指定图片大小这种需求的话,调用 override() 方法就好了 以上便是本文的全部文章,具体的代码我已经上传到

39740

浅谈Android 中图片的三级缓存策略

内存缓存,优先加载,速度最快 本地缓存,次优先加载,速度快 网络缓存,最后加载,速度慢,浪费流量 为什么要进行三级缓存 三级缓存策略,最实在的意义就是 减少不必要的流量消耗,增加加载速度 。...他会按照最近最少使用的算法将内存控制在一定大小内,超出的时候自动回收。...Glide 的内存缓存 Glide 是默认开启了内存缓存的,只要你通过 Glide 加载一张图片,他就会缓存到内存中,只要他还没被从内存中清理之前,下次使用 Glide 都会从内存缓存中加载。...diskCacheStrategy( ) 方法就可以调整他的硬盘缓存策略。...Glide 的硬盘缓存是默认将图片压缩转换再缓存到硬盘中,这种处理方式再避免OOM的时候会经常看见。 如果需要改变硬盘缓存策略只需要改变其传入的参数即可。

1.2K20

详解Glide最新版V4使用指南

概述 Glide是一个Android的图片加载和缓存库,它主要专注于大量图片的流畅加载Glide几乎可以胜任任何你需要使用到图片从网络拉取,压缩,显示的场景。...: Glide.with(fragment) .load(myUrl) .into(imageView); 取消加载也很简单: Glide.with(fragment).clear(imageView...3 注解(V4特性)和自定义方法 Glide使用了annotation processor来生成API,允许应用修改RequestBuilder、RequestOptions和任意的包含在单一流式API...这样做的目的是: 1.对于library项目来讲可以使用自定义方法继承Glide的API 2.对于应用来讲,在继承Glide的API,可以通过添加自定义方法。...使用DiskLruCacheWrapper作为默认的磁盘缓存,默认大小是250M,缓存文件放在APP的缓存文件夹下。

3.2K30

Google推荐的图片加载Glide:最新版使用指南(含特性)

这是V4的特性,运用注解使用起来更方便: ?...Glidev4中的Glide.with().load()没有之前版本的fitCenter和placeholder这样的方法,但是GlideApp有,可以直接在builder中使用。...这样做的目的是: 对于library项目来讲可以使用自定义方法继承Glide的API ; 对于应用来讲,在继承Glide的API,可以通过添加自定义方法。...在使用的时候,可以跳过内存缓存: ? 磁盘缓存 Glide使用DiskLruCacheWrapper作为默认的磁盘缓存,默认大小是250M,缓存文件放在APP的缓存文件夹下。 ?...View尺寸 GlideImageView的width和height属性是这样解析的: 如果width和height都大于0,则使用layout中的尺寸。

2.7K30

Android 基于 glide 4.0 封装图片加载

但由于该库的作者已经很久没维护了, 而且 Google 又力推自己员工出品的 glide,在比较了各大图片加载框架的性能之后,决定用 glide 作为的图片加载框架。...本文内容 为什么我要进行封装 结合 glide 特性的一些思考 封装通用的 CommonImageLoader 一、为什么我要进行封装 对于开源项目,有些库的 API 确实设计的相当棒,拿 glide...这个框架不熟悉的同学,可以看一下我这篇文章 glide 一个强大的图片加载框架 ),使用起来是不是特别的简单?...keeper = new Keeper(activity); mKeepers.add(keeper); } //hashCode 为 iHashCode 的对象需要使用图像加载功能...fragment没有创建对应Keeper throw new IllegalArgumentException(); } // hashCode 为 iHashCode 的对象需要使用图像加载功能

1.1K20

Android系统Bitmap内存分配原理与优化

这种说法是不正确的,图片占用内存的大小取决于它本身的大小,而取决于图片库所采用的展示方式所申请的内存。...Glide Glide则采用截然不同的处理方式,它最终使用的宽高是目标ImageView的宽高。...使Picasso达到与Glide同样的效果 Picasso的设计者也发现了这一缺点,提供一系列方法用来调整最终加载出来的图片尺寸,其一就是fit(),通过这个方法可以达到与Glide同样的效果。...Picasso().get().load(IMAGE_URL).fit().into(imageVIEW) 相反场景:小图加载到大ImageView中 通常为了提供更清晰的界面,防止图片拉伸失真模糊,...但也排除相反的可能:将小图加载到大ImageView里面。这时Glide默认采用的内存策略是存在不足的:它采用目标ImageView的尺寸作为最终的宽和高。

1.1K20
领券