首页
学习
活动
专区
工具
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 ‘优’ 与 ‘愁’

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

    93610

    android实现微信朋友圈发布动态功能

    上面红圈部分,当用户选中图片时,当=9张,那个加号图片就会消失! 本文主要仿照微信发布动态功能,主要时针对微信发布动态,选中图片后变化状态! 整体布局 ?...微信上效果是,先选中图片后才会进入这个界面,这里实现现在项目中用到效果:默认显示一个带+好图片,点击这个图片,会让你选择图片。...注意 我们不知道用户选择图片大小是怎么样,所以这里,选中图片后,先进行了压缩然后用glide去加载显示。...(这里之所以用glide是因为,用biatmap显示,即使压缩了,但是同时选中5张以上,就会oom,所以用glide加载压缩后url) 代码 代码里注释已经写很详细了!...(new OnCompressListener() { //设置调 @Override public void onStart() { //TODO 压缩开始前调用,可以方法内启动 loading

    3.6K21

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

    而且,功能也不算是很齐全吧…主要体现在以下几个点 没有调之后预览 选择之后不能删除已选 已选择图片再次选择不能带过去 剪裁 压缩 权限 Glide版本过低 但是,也是有特点 MD风格 白天模式和夜间模式...,还是会报错,在用Glide版本是4.6.1,Matisse中集成是3.7.0,是有区别的,具体你可以看这里 带你全面了解Glide 4用法,你也可以用Picasso。...,哇哭出声 使用 你以为集成都这么坎坷了,使用应该很方便吧,no啊大胸弟, 虽然集成之前看到150+Issues有点头皮发麻,果然没让失望,坎坷路还长着呢。...你以为从samplecopy 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()方法 我们都知道Glideinto()方法是可以传入ImageView

    2.6K70

    Android RecyclerView实现多种item布局方法

    项目中列表是基本都会用到,然而在显示列表,我们需要数据可能需要不止一种item显示,对于复杂数据就需要多种item,以不同样式显示出来,这样效果是很棒,我们先看一下效果 ? ?...表示当前是第几个Item,然后我们可以通过position拿到当前Item对象,然后判断这个item对象需要那种视图,返回一个int类型视图标志,然后onCreatViewHolder方法给引入布局...,就返回图片类型对应Item,这个就是效果图中第一个Item类型,否则就是其它类型,也就是效果图中另一种item布局,然后我们onCreatViewHolder具体为每一种类型引入其布局...用过ListView都知道,ListView若要复用视图缓存,就要在getView()方法手动判断convertView是否为空,若不为空则复用视图缓存,若为空则重新加载视图,而RecyclerView...RecyclerView有多少项数据,然后onCreateViewHolder()中加载item布局实例化ViewHolder,然后onBindViewHolder()完成数据绑定即可。

    4.4K21

    一篇博客理解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,这里是生成随机数来设置高度

    67130

    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

    98320

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

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

    1.3K70

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

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

    69020

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

    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图片肯定是错

    49630

    RecyclerView 实现gallery画廊效果

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

    2.8K50

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

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

    1.2K20

    Android 使用自定义RecyclerView控件实现Gallery效果

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

    1.1K40

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

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

    2.8K10

    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
    领券