【问题标题】:Resize images with Glide in a ImageView Android在 Android ImageView 中使用 Glide 调整图像大小
【发布时间】:2025-12-29 22:15:15
【问题描述】:

我对android中图像的处理有很多疑惑,希望看看你能不能解决。

此时我有一个高度为 320 dp 的图像和 match_parent 宽度,大约是屏幕的 60%。 这张使用 Glide 加载的图像,以及我个人拥有的 1080 中的一些图像。

我尝试制作 centroCrop 和 fitXY,但总是使图像变形。我知道的第一种类型会剪切图像,但第二种适合大小,但它确实会使图像变高或变宽。

有什么方法可以用 Glide 插入它并按原样查看吗? 我在 ImageView 和 Glide 上需要触摸哪些属性?

<ImageView
        android:id="@+id/img"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:nestedScrollingEnabled="false"
        app:layout_collapseMode="parallax"
        android:scaleType="fitXY"
        app:layout_scrollFlags="scroll|enterAlways" />

【问题讨论】:

  • 使用.override(w,h)
  • 我有一张没有 1080 的图片?例如与用户。他们有不同尺寸的图片。
  • @Traif 使用 Glide 检查自定义转换。
  • 不明白..如果你覆盖(w,h)你的问题是什么??

标签: android imageview resize android-glide


【解决方案1】:
Glide
    .with(context)
    .load(path)     
    .apply(new RequestOptions().override(600, 200))
    .centerCrop() 
    .into(imageViewResizeCenterCrop);

@Raghunandan 是对的。你应该尝试用自己的方式进行改造。

【讨论】:

  • 注意:必须在最新版本的 glide 中通过 RequestOptions 访问 Override: "apply(new RequestOptions().override(600, 200))"
【解决方案2】:

Override 必须通过RequestOptions 在最新版本的Glide 4.x 中访问。您可以通过apply()添加RequestOptions

Glide
    .with(context)
    .load(path)
    .apply(new RequestOptions().override(600, 200))
    .into(imageViewResizeCenterCrop);

【讨论】:

  • 你是对的。我认为开发人员应该阅读而不仅仅是复制粘贴,尤其是新版本中的内容。
  • 只有当原始图像大于您想要的尺寸时才可以调整大小?我需要将图像的最大边设置为 1000 像素,但如果我使用 override(1000) Glide 会给我 1000x1000 图像,即使它是 10x10。
  • @Den。这对你来说是最好的方法。 *.com/a/8471294/4140069
  • @AungMyoLwin 不,不是最好的。您需要原始位图来创建缩放位图 - 它需要大量 RAM。我想得到预先缩放的位图。
  • 也可以直接使用.override(w, h).override(size = &lt;min(w, h)&gt;)(不带.apply(new RequestOptions())。此外,如果您将 size 设置为 0,Glide 将加载全尺寸图像
【解决方案3】:

Glide 4.x - 如果你想得到位图,试试:

Glide.with(mContext).asBitmap().
                        load(pictureUri)
                        .apply(new RequestOptions().override(50, 50))
                        .listener(new RequestListener<Bitmap>() {
                            @Override
                            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
                                return false;
                            }
                        @Override
                        public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
                            // resource is your loaded Bitmap
                            imgView.setImageBitmap(resource);
                            return true;
                        }
                    }).submit();

【讨论】:

    【解决方案4】:

    在 glide 4.x 中,“覆盖”在“应用”中:

    Glide.with(getBaseContext())
     .load(path)
     .apply(RequestOptions.placeholderOf(R.mipmap.no_wifi)
     .error(R.mipmap.no_wifi)
     .override(500,500))
     .into(mImageView);
    

    【讨论】:

      【解决方案5】:

      您必须对您的 imageview 执行以下操作:

              <ImageView
                  android:id="@+id/img"
                  android:layout_width="match_parent"
                  android:layout_height="200dp"
                  android:scaleType="fitCenter" />
      

      这与你的滑翔:

          Glide.with(getBaseContext())
                  .load(path)
                  //.placeholder(R.drawable.drawable)
                  .error(R.drawable.noimg)
                  .animate(R.anim.animation_fade_in)
                  .into(mImageView);
      

      这很适合我。

      【讨论】:

        【解决方案6】:

        如果你想在不使用 glide 的情况下加载图像,那么你可以使用 scaleType "fitCenter" 或 "centerInside" 如下 -

        <ImageView
                android:id="@+id/img"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:nestedScrollingEnabled="false"
                app:layout_collapseMode="parallax"
                android:scaleType="centerInside"
                app:layout_scrollFlags="scroll|enterAlways" />
        

        使用 Glide 你可以使用 override(w,h)。当你使用 override(w,h) 时,glide 会生成一个新的位图,其宽度和高度在 override(w,h) 中提到,然后将图像加载到 ImageView 中。您可以使用 fitCenter() 来对齐图像。你也可以使用diskCacheStrategy()。如果你不使用它,Glide 将只捕获新生成的位图。如果您还想捕捉原始图像,请使用 diskCacheStrategy(DiskCacheStrategy.ALL)。

        Glide.with(context)
                    .load(image_path)
                    .override(800, 400)
                    .fitCenter()
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .into(imageView)
        

        我希望这会有所帮助。

        【讨论】:

        • 注意:在最新版本的 Glide 中必须通过 RequestOptions 访问 Override: "apply(new RequestOptions().override(800, 400))"