如何在 GridView Android Studio 中完美地适应图像

How to fit an image perfectly inside GridView Android Studio

提问人:Newbie_programmer 提问时间:11/1/2023 最后编辑:Newbie_programmer 更新时间:11/20/2023 访问量:49

问:

我正在尝试创建一个使用 GridView 显示图像的项目。但问题是图像可以有各种大小。它们有些很大,有些很小。因此,我想在 GridView 中完美地适合图像。但无论我尝试什么,都不会让它变得更好。下面这张照片可以清除更多-

enter image description here

我希望图片是正方形大小和中心裁剪的,但由于某种原因,它们被垂直拉伸。

相关代码片段如下 -

ImageView 代码

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="3dp"
    android:scaleType="centerCrop"
    android:id="@+id/gridImage"/>

GridView 代码

<GridView
    android:id="@+id/grid"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:numColumns="3"
    android:scrollbars="vertical"
    android:horizontalSpacing="5dp"
    android:verticalSpacing="3dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/line" />

GridAdapter 代码

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    if(inflater==null)
        inflater = (LayoutInflater) cx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if(view == null)
        view = inflater.inflate(R.layout.grid_item, null);

    ImageView imageView = view.findViewById(R.id.gridImage);
    Pictures p = pictures.get(i);
    Glide.with(cx).load(p.getImageID()).centerCrop().placeholder(R.drawable.avatar).into(imageView);
    return view;
}

我尝试了 ImageView 的所有 scaleType,但它们都没有使图像成为方形、居中裁剪并完美地适合 GridView。我在这里遗漏了什么吗?

java android gridview imageview

评论

0赞 MãĴď 11/1/2023
尝试使用 fitSystemWindows = “true” ,您还可以裁剪每个图像,以便确定每个图像的宽度和高度。
0赞 sandeep-prabhakula 11/1/2023
尝试将 ImageView 的layout_height约束从 match_parent 更改为 wrap_content
0赞 Newbie_programmer 11/3/2023
这些都没有奏效。如何裁剪每张图片?

答:

0赞 Sanjay 11/1/2023 #1

您可以使用众所周知的第三方库(如 picasso 或 glide)将图像加载到 ImageView 中,与本机加载相比,这非常容易。当我们将原生加载与 picasso/glide 进行比较时,原生加载有几个缺点,例如内存泄漏、复杂性和一致性。虽然您可以轻松地从 glide/picasso 中实现您想要的东西。

评论

0赞 Newbie_programmer 11/2/2023
图片是使用 Glide 加载的。这些图片实际上是Firebase数据库中的一些链接。我使用了一个适配器,在该适配器中,我在“Glide”中加载了这些 uri 链接以显示图片。
0赞 Sanjay 11/2/2023
如果您能提供更多的 java/Kotlin 代码,关于您如何设置 glide,那将会有所帮助。我使用此代码将裁剪图像居中“Glide.with(this).load(userData.results[0].picture.large).centerCrop().into(binding.ivImageGlide)”
0赞 Newbie_programmer 11/3/2023
请再次检查问题,我添加了 GridAdapter 代码片段。我也像你一样使用了 centerCrop,但它是一回事,垂直拉伸!
0赞 Community 11/3/2023
您的答案可以通过额外的支持信息得到改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。
0赞 rv_5143 11/4/2023 #2

android:adjustViewBounds=“true” 或 android:scaleType=“fitXY” 有关视图,请参阅此处的输入链接说明

评论

0赞 Community 11/5/2023
您的答案可以通过额外的支持信息得到改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。
0赞 Newbie_programmer 11/5/2023
哪个视图?图像视图?我尝试了 ImageView 的 fitXY,但它不起作用。事实上,这让情况变得更糟。
1赞 rv_5143 11/6/2023
您是否在 ImageView 上尝试过 AdjustViewBounds 是的
0赞 Newbie_programmer 11/19/2023
哇!adjustviewbounds 确实有效!非常感谢。我一直在努力解决这个问题。请您按照社区机器人所说的细节编辑您的答案,以便我可以接受这个问题吗?@rv_5143
0赞 rv_5143 11/20/2023
看到它现在编辑了它是否有效//