1

这是我的布局文件

<LinearLayout ...
<ImageView
    android:id="@+id/feed_image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal"
    android:adjustViewBounds="true"
    android:contentDescription="@string/image_content_description" />

但是宽度与父ImageView宽度不匹配。(宽度为图像源宽度)

Image Source 从 url 加载延迟加载。

如何缩放图像视图无规则图像源的宽度?

我想

宽度 = 匹配(或填充)父级。

高度 = 自动缩放

4

5 回答 5

7

您可以通过两种方式实现此目的:

  1. 如果您的图像比 ImageView 大,您只能使用 xml

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scaleType="fitCenter"
        android:adjustViewBounds="true"/>
    
  2. 如果您的图像小于 ImageView

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

使用第二个选项,您必须根据图像视图的实际宽度(相同的比例)测量图像的宽度和高度并在代码中设置 ImageView 的高度。

于 2014-03-17T06:10:02.563 回答
1
  1. 您可以使用android:scaletype="fitXY"imageview 的属性

    2.默认Android会缩小你的图像以适应ImageView,保持纵横比。但是,请确保您使用 android:src="..." 而不是 android:background="..." 将图像设置为 ImageView。src= 使其缩放图像保持纵横比,但 background= 使其缩放和扭曲图像以使其完全适合 ImageView 的大小。(不过,您可以同时使用背景和源,这对于仅使用一个 ImageView 在主图像周围显示框架等非常有用。)

于 2013-07-19T06:08:30.377 回答
0

如果要使图像适合视图,请使用 android:scaleType="fitXY"

于 2013-07-19T06:04:47.053 回答
0

你可以用这个来实现这一点,创建扩展 imageView 的新 AspectRatioImageView:

public class AspectRatioImageView extends ImageView {

    public AspectRatioImageView(Context context) {
        super(context);
    }

    public AspectRatioImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AspectRatioImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        Drawable drw = getDrawable();
        if (null == drw || drw.getIntrinsicWidth() <= 0) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        } else {
            int width = MeasureSpec.getSize(widthMeasureSpec);
            int height = width * drw.getIntrinsicHeight() / drw.getIntrinsicWidth();
            setMeasuredDimension(width, height);
        }
    }
}

然后在您的布局 xml 中使用:

<my.app.AspectRatioImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/ar_imageview"/>
于 2014-03-17T08:37:13.600 回答
0
<ImageView
    android:id="@+id/idImage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scaleType="fitXY"/>

根据您想要的纵横比计算高度

    Display display = getActivity().getWindowManager().getDefaultDisplay();
    int height = (display.getWidth() * 9) /16; // in this case aspect ratio 16:9

    ImageView image = (ImageView) findViewById(R.id.idImage);
    image.getLayoutParams().height = height;
于 2015-12-04T21:58:17.670 回答