gpt4 book ai didi

android - 如何在保持纵横比的同时使图像尽可能大

转载 作者:IT老高 更新时间:2023-10-28 23:14:16 26 4
gpt4 key购买 nike

我的图像比我希望它放入的容器小。我希望将图像拉伸(stretch),保持其纵横比,使其尽可能大。

为了说明这个问题:

<ImageView  android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/thumbnail"
android:scaleType="fitXY"
android:adjustViewBounds="true"/>

上面的 ImageView 将被拉伸(stretch)以填充容器的宽度。它包含的 @drawable 也会沿 x 轴拉伸(stretch)以适应 ImageView 的宽度,这是完美的。然而问题是标记为 wrap_content 的维度,在这种情况下为高度,与 @drawable 的初始高度保持相同的大小。

我已阅读有关 ScaleType here 的文档在那里找不到答案。

下图描述了上面的代码:

enter image description here enter image description here

  Current behaviour               Desired Behaviour

编辑

给定 scaleType="fitCenter"ImageView 将准确地扩展/缩小其中的 @drawable 以尽可能大,同时保持它的纵横比。

ImageView 的尺寸是在 @drawable 以任何方式缩放之前定义的。 ImageView 尺寸不受其包含的 @drawable 缩放的影响。

最佳答案

XML

在 XML 中解决此问题的唯一方法是尽可能使用 "match_parent" 或离散最大值而不是 "wrap_content"。这将确保 ImageView 的大小正确,这意味着添加 scaleType="fitCenter" 将确保 @drawable 然后正确缩放.

以编程方式

这很丑,但是你可以在 ImageView 的尺寸被赋予离散值后调整它的大小:

    final ImageView thumbnailView = (ImageView) toReturn.findViewById(R.id.thumbnail);  

ViewTreeObserver thumbnailViewVto = thumbnailView.getViewTreeObserver();
thumbnailViewVto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
private boolean changed = false;
@Override
public void onGlobalLayout() {
if(!changed) {
Drawable image = getResources().getDrawable(R.drawable.thumbnail);
float heighToWidthRatio = image.getIntrinsicWidth()/image.getIntrinsicHeight();
int height = thumbnailView.getHeight();

thumbnailView.setLayoutParams(
new LayoutParams(
(int) (height * heighToWidthRatio), height));
changed = true;
}
}
});

编辑

    final ImageView thumbnailView = (ImageView) toReturn.findViewById(R.id.thumbnail);  

thumbnailView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override
public void onGlobalLayout() {
// Remove the GlobalOnLayout Listener so it only fires once.
thumbnailView.getViewTreeObserver().removeGlobalOnLayoutListener(this)

// Find the images Height to Width ratio
Drawable image = getResources().getDrawable(R.drawable.thumbnail);
float heighToWidthRatio = image.getIntrinsicWidth()/image.getIntrinsicHeight();

// Use this ratio to discover the ratio of the ImageView to allow it to perfectly contain the image.
int height = thumbnailView.getHeight();
thumbnailView.setLayoutParams(new LayoutParams(
(int) (height * heighToWidthRatio), height));
}
});

关于android - 如何在保持纵横比的同时使图像尽可能大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7486701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com