Android开发

RecycleView + Glide 在刷新的时候 网络图片会出现忽大忽小的问题

本文主要是介绍RecycleView + Glide 在刷新的时候 网络图片会出现忽大忽小的问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言

在使用 RecycleView + Glide 加载网络图片的时候会出现 刷新的时候同一张图片会忽大忽小的问题;

原因

原因是因为我们在加载网络图片的时候,因为图片的大小和比例并不是固定的,所以ImageView并没有设置固定的大小,而是设置为 “wrap_content” 自适应大小,而Glide的图片加载逻辑为:

1.如果 View 的布局参数尺寸 > 0 且 > padding,则使用该布局参数; 2. 如果 View 尺寸 > 0 且 > padding,使用该实际尺寸; 3. 如果 View 布局参数为 “wrap_content” 且至少已发生一次 layout ,则打印一行警告日志,建议使用 Target.SIZE_ORIGINAL 或通过 override() 指定其他固定尺寸,并使用屏幕尺寸为该请求尺寸; 4. 其他情况下(布局参数为 match_parent, 0, 或 wrap_content 且没有发生过 layout ),则等待布局完成,然后回溯到步骤1。

所以会出现忽大忽小的问题

解决方法

解决方法 一:直接给ImageView 设置固定大小 如下代码:

       <ImageView
                android:id="@+id/iv_photo"
                android:layout_width="260dp"
                android:layout_height="260dp"
                 android:scaleType="fitStart"
                />
复制代码

这样就可以使 网络图片同一个网络地址每次刷新都会变大变小的问题;但是这样会出现如果网络图片本身尺寸比较小 下方回出现很大一片空白的问题;到这里我们就可以用我们的第二种方法来解决了。

解决方法 二:在使用Glide加载时 调用 Glide的override 这个方法给图片设置大小,而ImageView 设置为 自适应“wrap_content”如下代码:

    
        <ImageView
                android:id="@+id/iv_photo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constrainedWidth="true"
                app:layout_constrainedHeight="true"
                app:layout_constraintWidth_max="260dp"
                app:layout_constraintHeight_max="260dp"
                app:layout_constraintHeight_min="100dp"
                android:scaleType="fitStart"/>
复制代码

下面时Glide加载代码

        GlideApp.with(context)
            .load(url)
            //设置固定的  宽高尺寸 单位为像素
            .override(DisplayUtils.dp2px(context,260f))
            .placeholder(R.mipmap.message_icon_error_image)
            .error(R.mipmap.message_icon_error_image)
            .into(imageView)
复制代码

使用这种方法时 当网络图片本身像素小于 设置的宽高时 会显示网络图片的宽高,而当网络图片大于设置的宽高时Glide会进行比例压缩,这样就完美的达到了我们需要的效果了,而且也解决了同一个网络图片每次刷新显示的大小不一样的问题。

这篇关于RecycleView + Glide 在刷新的时候 网络图片会出现忽大忽小的问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!