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

为什么我在RecyclerView中的ImageView有时会在滚动回(使用Glide)时调整大小?

在RecyclerView中使用ImageView加载图片时,有时会出现在滚动回来时图片大小调整的情况。这是因为RecyclerView的回收和复用机制导致的。

RecyclerView是用于展示大量数据列表的控件,为了提高性能和减少内存占用,RecyclerView会对屏幕外的Item进行回收和复用。当一个Item滚出屏幕时,它的View会被回收,然后被用来展示新的Item。这样可以避免频繁创建和销毁View,提高了滚动的流畅性。

当一个Item的View被回收后,其中的ImageView也会被回收。当这个View被复用来展示新的Item时,ImageView的大小可能会被调整,因为ImageView的大小是根据新的Item的需求来确定的。如果新的Item需要一个较小的图片,ImageView的大小就会相应地调整为适应新的图片大小。

为了解决这个问题,可以在加载图片时使用Glide的placeholder()方法设置一个固定大小的占位图,这样即使ImageView的大小被调整,也能保持占位图的大小不变。另外,可以使用Glide的override()方法设置固定的图片大小,这样即使ImageView的大小被调整,图片也会被缩放到指定的大小。

综上所述,RecyclerView中的ImageView在滚动回来时调整大小是由于RecyclerView的回收和复用机制导致的。可以通过设置固定大小的占位图和图片大小来解决这个问题。

腾讯云相关产品推荐:

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

相关·内容

Material Design 实战 之第四弹 —— 卡片布局

其中, scroll 表示当RecyclerView向上滚动时,Toolbar会跟着一起向上滚动并实现隐藏; enterAlways 表示当RecyclerView向下滚动时...最重要的是,Glide的用法非常简单,只需一行代码就能轻松实现复杂的图片加载功能,因此这里我 们准备用它来加载水果图片。...注意在ImageView中我们使用了一个scaleType属性,这个属性可以指定图片的缩放模式。...其中, scroll表示当RecyclerView向上滚动时,Toolbar会跟着一起向上滚动并实现隐藏; enterAlways表示当RecyclerView向下滚动时,Toolbar会跟着一起向下滚动并重新显示...又会根据当前滚动的距离情况,做出消失或者重新出现的反应; 这其实也是MaterialDesign中的一项重要设计思想,因为当用户在向上滚动RecyclerView的时候,其注意力肯定是在RecyclerView

2.1K10

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

Glide也是支持“所有”的ImageView,使用过程中十分流畅,这里推荐两个库: GlidePalette 一个可以在Glide加载时很方便使用Palette的库。...glide-transformations 处理各种图片显示效果的,先看下面的图片。为什么着重推荐这个,因为如果是用的是圆形的ImageView或者特殊裁剪的什么,那么很可能会有问题。 什么问题?...setTag要使用SimpleTarget或者继承GlideModule,可以配置成OKHttp来替代请求等等等等等。 聪明的你一定知道了,因为我要说Fresco,那么为什么不用Glide了呢?...挺好的啊~这·····因为某次我要把通过图片URL拿本地缓存的时候,我居然找不到同步获取的方法(ノಠ益ಠ)ノ彡┻━┻,除了异步的回调之外,我居然找不到····而且听说Fresco对GIF和webp支持更好...DownsampleEnabled来让图片压缩,不然全图展示超大的图片还是会有OOM,如果用了这个,在底层Fresco就帮助你调整好了,回调给你的图片比例采样后一定不会OOM(虽然可以用七牛的图片处理)

1.5K20
  • Glide ‘优’ 与 ‘愁’

    后来Google在2014年的google I/O大会上发布的官方app中使用的 bumptech/glide 闯入大家的视野, Google 推荐大家图片加载使用 Glide....所以 fresco 相比较于 Glide 的(官方)优势就是这两点: 内存以及加载速度。但是我为什么依旧坚持抛弃了 fresco ?...官方的原话是这么说的,所以在高版本上面依旧使用的Java 内存,所以不可避免依旧会占用内存。 提到内存,不得不说到另外一个笑话,fresco 最大只支持图片文件大小为 2M 。...Glide 的使用方式上,一定需要传入一个 context 给它。它为什么需要拿上下文呢?...普通的imageview其实也还好,如果放在列表(RecyclerView)中, 由于我们并不知道目标图片大小是多大的,所以我们选择了wrap_content,那么在上下来回滚动过程中,就会导致图片一会大一会小的

    93810

    Android 选择图片、上传图片之Matisse

    而且,功能也不算是很齐全吧…主要体现在以下几个点 没有回调之后的预览 选择之后不能删除已选 已选择的图片再次选择不能带过去 剪裁 压缩 权限 Glide版本过低 但是,也是有特点的 MD风格 白天模式和夜间模式...,还是会报错,我在用的Glide版本是4.6.1的,Matisse中集成的是3.7.0的,是有区别的,具体你可以看这里 带你全面了解Glide 4的用法,你也可以用Picasso。...,哇的哭出声 使用 你以为集成都这么坎坷了,使用应该很方便吧,no啊大胸弟, 虽然集成之前我看到150+的Issues有点头皮发麻,果然没让我失望,坎坷的路还长着呢。...你以为从sample中copy copy代码,导下包就能跑起来了吗,nonono 选择器不光是有图片的吧,你可能还有gif和视频啊,所以在配置的时候你要选择一个type啊 sample是这样的 Matisse.from...遇到几个点还没有解决,也懒得深入研究了,我要回家过年,哼 拍照还是选择相册,没有处理 预览,选择图片的时候可以预览,但是回调之后并不行,没有处理 onActivityResult回调之后的图片不能直接删除

    1.7K10

    Android图片加载框架最全解析(八),带你全面了解Glide 4的用法

    而且也不断有朋友一直在留言,想让我讲一讲Glide 4的用法,因为Glide 4相对于Glide 3改动貌似还是挺大的,学完了Glide 3再去使用Glide 4,发现根本就无法使用。....into(imageView); } } 指定图片大小 实际上,使用Glide在大多数情况下我们都是不需要指定图片大小的,因为Glide会自动根据ImageView的大小来决定图片的大小,以此保证图片不会占用过多的内存从而引发...也就是说,Glide现在只会将图片加载成200*100像素的尺寸,而不会管你的ImageView的大小是多少了。...比方说你在一个RecyclerView当中反复上下滑动,RecyclerView中只要是Glide加载过的图片都可以直接从内存当中迅速读取并展示出来,从而大大提升了用户体验。...回调与监听 回调与监听这部分的内容稍微有点多,我们分成四部分来学习一下。 1. into()方法 我们都知道Glide的into()方法中是可以传入ImageView的。

    2.7K70

    一篇博客理解Recyclerview的使用

    ,我们可以在Adapter中添加这个回调接口: 例子2:可以点击的RecyclerView 在原工程基础上对Adapter进行修改,添加OnItemClickListener接口,由于具体点击后的逻辑是交给...(R.id.iv_item); } } } 效果如下: 4.自定义RecyclerView实现滚动时内容联动 例子3:RecyclerView制作相册效果 效果:在原工程的基础上进行修改...(R.id.iv_item); } } } 定义了一个滚动时回调的接口,然后在onTouchEvent中,监听ACTION_MOVE,用户手指滑动时,不断把当前第一个View回调回去 关于为什么...效果如下: 5.RecyclerView实现瀑布流 例子4:用RecyclerView打造瀑布流效果 其中大部分内容实现和基本的RecyclerView使用是一样的,就不多叙述了,就一个地方不同...,就是我们在适配器中绑定ViewHolder的方法中需要重新给我们的itemView布局设置height,这里是生成随机数来设置高度的。

    69630

    Android从零撸美团(四) - 美团首页布局解析及实现 - Banner+自定义View+SmartRefreshLayout下拉刷新上拉加载更多

    项目中还用到了很多其他库,如 Dagger、RxJava、ButterKnife、Glide 等,就不一一贴出来了,具体的使用方式请自行查阅资料或看本项目源码 https://github.com/cachecats.../LikeMeiTuan 三、实现 项目采用 MVP 架构,主页代码在 app/home 目录下的 HomeFragment 和 HomeFragmentPresenter 中。...Banner轮播条 添加Banner依赖后,在布局文件中添加 Banner布局,并设置控件高度、图片裁剪模式、滚动时间等参数,然后在 HomeFragment 中初始化: public void initBanner...onStart 方法中开启自动播放,在 onStop 方法中关闭自动播放。...大模块 BigModule 实现 在主页布局中用一个 LinearLayout 作为占位,并确定这个模块的位置。具体的内容在代码中动态添加,方便后期维护修改。

    1.3K30

    界面无小事(九): 做个好看的伸缩头部

    代码中使用Glide加载图片....导包: implementation 'com.github.bumptech.glide:glide:3.7.0' // 加载图片 ImageView ivMain = (ImageView) findViewById...如果在此之前的任何兄弟视图没有此标志, 则此值无效. exitUntilCollapsed 退出(滚动屏幕)时, 视图将滚动直到“折叠”. 折叠高度由视图的最小高度定义。...snap 在滚动结束时, 如果视图仅部分可见, 则它将被捕捉并滚动到其最近的边缘. enterAlways 当进入(在屏幕上滚动)时, 无论滚动视图是否也在滚动, 视图都将滚动任何向下滚动事件....喜欢记得点赞, 有意见或者建议评论区见, 暗中关注我也是可以的哦~ 顺带一提, 腾讯云+社区也将同步我的文章了, 目前还在审核中: 我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https

    98920

    (转载非原创)Android系统Bitmap内存分配原理与优化

    在这篇文章中,笔者将讲解一张看似普通的Bitmap对内存的占用,介绍Android Studio中帮助我们分析图片占用内存的工具,举例说明流行的两大图片加载框架:Glide、Picasso在加载图片时使用内存的不同方式...Glide Glide则采用截然不同的处理方式,它最终使用的宽高是目标ImageView的宽高。...举例说明,当把350 * 350的钢铁侠图片加载到600 * 600的ImageView中时,占用的内存高达1.41MB。...可以在初始化Glide时进行这样的配置。需要留意的是不要对含透明区域的图片采用这种优化方案。...在多图的场景(比如RecyclerView)注意及时释放图片资源; 使用占据内存更小的图片格式; 图片源文件尺寸应当与目标ImageView相近; 优先满足xxhdpi、xxxhdpi

    69620

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

    Fresco 中设计有一个叫做 Drawees 模块,方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。...因为 Glide可以自动计算出任意情况下的ImageView大小。 缓存策略 Picasso和Glide在磁盘缓存策略上有很大的不同。...尝试将ImageView调整成不同大小,但不管大小如何Picasso只缓存一个全尺寸的。Glide则不同,它会为每种大小的ImageView缓存一次。...); 下次在任何ImageView中加载图片的时候,全尺寸的图片将从缓存中取出,重新调整大小,然后缓存。...Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟。不过各有所长。

    1.3K70

    如何设计一个图片加载框架

    Unsafe类去操作,java在申请一块直接内存之后,会在堆内存分配一个对象保存这个堆外内存的引用,这个对象被垃圾收集器管理,一旦这个对象被回收,相应的用户线程会收到通知并对直接内存进行清理工作。...4.4以下,Fresco 使用匿名共享内存来保存Bitmap数据,首先将图片数据拷贝到匿名共享内存中,然后使用Fresco自己写的加载Bitmap的方法。...Glide的做法是监听生命周期回调,看 RequestManager 这个类 public void onDestroy() { targetTracker.onDestroy(); for...(this); } 在Activity/fragment 销毁的时候,取消图片加载任务 列表加载问题 图片错乱 由于RecyclerView或者LIstView的复用机制,网络加载图片开始的时候...ImageView是第一个item的,加载成功之后ImageView由于复用可能跑到第10个item去了,在第10个item显示第一个item的图片肯定是错的。

    50530

    RecyclerView 实现gallery画廊效果

    还有一点,ListView中convertView是复用的,在RecyclerView中,是把ViewHolder作为缓存的单位了,然后convertView作为ViewHolder的成员变量保持在ViewHolder...2、为RecyclerView添加OnItemClickListener回调 虽然它没有提供,但是添加个OnItemClickListener对我们来说还不是小菜一碟~ 我决定在Adapter中添加这个回调接口...       {   super(context, attrs);       }   private View mCurrentView;   /**      * 滚动时回调的接口...,然后在onTouchEvent中,监听ACTION_MOVE,用户手指滑动时,不断把当前第一个View回调回去~ 关于我咋知道getChildAt(0)和getChildPosition()可用,起初我以为有...可以看到不仅支持手机在上面移动时的变化,如果我给了一个加速度,下面持续滚动,上面也会持续变化~~大赞~每张图片回调一次,效率也相当不错。

    2.9K50

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

    在这篇文章中,笔者将讲解一张看似普通的Bitmap对内存的占用,介绍Android Studio中帮助我们分析图片占用内存的工具,举例说明流行的两大图片加载框架:Glide、Picasso在加载图片时使用内存的不同方式...Glide Glide则采用截然不同的处理方式,它最终使用的宽高是目标ImageView的宽高。...举例说明,当把350 * 350的钢铁侠图片加载到600 * 600的ImageView中时,占用的内存高达1.41MB。...可以在初始化Glide时进行这样的配置。需要留意的是不要对含透明区域的图片采用这种优化方案。...在多图的场景(比如RecyclerView)注意及时释放图片资源; 使用占据内存更小的图片格式; 图片源文件尺寸应当与目标ImageView相近; 优先满足xxhdpi、xxxhdpi的图片资源需求;

    1.2K20

    基于Android开发的天气预报app(源码下载)「建议收藏」

    所以这边为了避免这种情况的不确定因素,我选择了使用百度提供的免费地位接口,在国内,百度和高德定位服务做得都还是不错的。使用百度定位api接口同样需要注册一个百度开发者账号,因为这不是本篇文章的重点。...我的设计是在使用三个Activity去和用户交互,参照我的项目截图,其中WeatherActivity作为启动活动,用于显示天气信息,提供的是多页带导航栏可左右滑动的效果。...在调用函数时传入一个回调接口的指针,当异步线程完成相应的耗时操作之后,再使用该指针调用回调函数即可实现异步线程与主线程的交互了。 城市列表的信息的获取到这里就算结束了。...= null) { Glide.with(WeatherActivity.this).load(bingPic).into(bingPicIv); } 当它不为空时,我们使用Glide去下载并加载图片到天气显示背景...创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。

    3.3K10

    Android-UI布局---RecyclerView学习(二)利用它做的相册集效果

    *滚动时,判断当前第一个View是否发生变化,发生才回调 */ @Override public void onScrolled(int arg0, int arg1) { View...} 可以参考下 Listview的适配器时候的写法,基本一致,只是在我们自己定义的适配器中加入了 自定义的点击事件,回调接口 接下来就是对应的activity类了: public class...需要学习的第二个知识点就是:在对应的activity中关于RecyclerView 的使用 RecyclerView的使用代码: //找到对应的视图控件 mRecyclerView = (MyRecyclerView...而RecyclerView基本需要上面一系列的步骤,那么为什么会添加这么多的步骤呢?...那么就必须解释下RecyclerView的这个名字了,从它类名上看,RecyclerView代表的意义是,我只管Recycler View,也就是说RecyclerView只管回收与复用View,其他的你可以自己去设置

    1.4K30

    android图片加载库Glide

    外部缓存 在默认情况下Picasso和Glide的外部缓存机制是非常不一样的,通过实验可以发现(1920x1080 像素的图片被加载到768x432像素的imageview中),Glide缓存的是768x432...当我们调整imageview的大小时,Picasso会不管imageview大小是什么,总是直接缓存整张图片,而Glide就不一样了,它会为每个不同尺寸的Imageview缓存一张图片,也就是说不管你的这张图片有没有加载过...,只要imageview的尺寸不一样,那么Glide就会重新加载一次,这时候,它会在加载的imageview之前从网络上重新下载,然后再缓存。...gif的缓存和一般的图片也是一样的,也是第一次加载的时候调整大小,然后缓存。 但是,要注意的是,通过测量,我们可以发现gif图片将消耗非常多的内存,因此使用它的时候要慎重。...库的大小 Picasso的大小大约是118KB,而Glide大约有430KB。  ? 一个库的大小有什么意义吗?确实,我也认为意义不大!

    1.9K60

    安卓易学,爬坑不易——腾讯老司机的RecyclerView局部刷新爬坑之路

    WeTest导读 安卓开发者都知道,RecyclerView比ListView要灵活的多,但不可否认的里面的坑也同样埋了不少人。下面让我们看看腾讯开发工程师用实例讲解自己踩坑时的解决方案和心路历程。...这个是RecyclerView自带的更新动画效果导致的? 这个是因为图片加载框架(glide 的 animte)的动画效果导致的?...getView中(RecyclerView中是onBindViewHolder)加载图片的时候,设置一个tag,当发现这个imageView的tag和之前的tag一致时就不加载 二、带着思考,就去尝试吧...因为我们的这个列表项中的图片是(高=宽)的,因此,我才这么写,这样写也有一个好处,不用在onBindViewHolder中去动态的计算出高度,然后在已layoutParm的方式设置给imageView,...我了解到这个方法的使用方式是这样的: ?

    78520

    Android Jetpack系列——DataBinding 最佳实践

    看了谷歌官方文章确实写的太简略了,甚至看完之后有很多地方还不知道怎么回事儿或者怎么用,那么接下来我将通过几篇文章全面介绍一下 DataBinding 以及 DataBinding 的使用。...的简单使用 ) ,这篇文章,我们来介绍一下 DataBinding 最佳实践——Binding adapters 我之所以说 Binding adapters 是 DataBinding 的最佳实践...type:字节码 attribute:属性 method:方法 会在指定的字节码(type)中寻找方法(method), 然后通过你创建的布局属性(Attribute)来回调方法。...使用 @Bindable 来标记的 get 方法,在编译时,会在BR类当中生成对应的字段,然后与 notifyPropertyChanged() 方法配合使用,当该字段中的数据被修改时,dataBinding...还有一点注意的是,我们设置glide的时候,别忘了在AndroidManifest文件当中把权限设置上!

    1.9K40
    领券