0

我有一个带有背景图像的布局。图像宽度应与屏幕宽度(match_parent)相同。但这很丑陋,操作系统不会拉伸图片的高度。我听说过 ImageView scaleType,所以我在 ImageView 中有背景图像而不是布局背景,但我无法配置为我想要的。

如何设置布局或 ImageView 以缩放图像(宽度)以适应屏幕的宽度并以相同的比例缩放高度?

我想要图片中的第二个屏幕: 在此处输入图像描述

更新:

我正在尝试使用代码,但我得到 0 宽度 + 我不敢相信这不能从带有 ImageView 的 xml 中完成。

    Drawable imageDrawable = getResources().getDrawable(imageResource);
    contentContainer.setBackgroundDrawable(imageDrawable);

    Rect rect = imageDrawable.getBounds();
    int originalWidth = rect.width();
    int originalHeight = rect.height();

    Display display = getActivity().getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth();

    int height = originalHeight * (width/originalWidth);

    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height);
    contentContainer.setLayoutParams(layoutParams);


    contentContainer.post(new Runnable() {

        @Override
        public void run() {
            contentContainer.setScaleY(contentContainer.getScaleX());

            Rect rect = contentContainer.getBackground().getBounds();
            int originalWidth = rect.width();
            int originalHeight = rect.height();

            Display display = getActivity().getWindowManager().getDefaultDisplay(); 
            int width = display.getWidth();

            int height = originalHeight * (width/originalWidth);

            RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height);
            contentContainer.setLayoutParams(layoutParams);

        }
    }
4

5 回答 5

0

将宽度match_parent和高度fill_parent 赋予 imageView,另一种方法是应用android:layout_weight属性试试这可能是可行的。

于 2013-11-08T10:26:19.307 回答
0

您可以在运行时通过测量设备的宽度来执行此操作,如下所示:-

    super.onCreate(savedInstanceState);
    setContentView(<layout-resoure-id);
    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();
    int imageSize = 0;
    if (width > height)
        imageSize = height;
    else
        imageSize = width;

    ImageView imageView = (ImageView) findViewById(R.id.imageView);
    imageView.getLayoutParams().width = imageSize;
    imageView.getLayoutParams().height = imageSize;
    imageView.setImageResource(R.drawable.pattu);

你的 xml:--

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
       android:layout_height="fill_parent"
    android:layout_margin="10dp"
    android:orientation="vertical" >

   <ImageView
    android:id="@+id/imageView"
    android:layout_width="100dp"
    android:layout_height="100dp" 
    android:scaleType="fitXY"/>

  </LinearLayout>

享受...!

于 2013-11-08T10:37:15.627 回答
0

使用 FrameLayout 作为父级,然后将 imageview 添加为子级。

于 2013-11-08T10:07:45.913 回答
0
    ImageView imageView = (ImageView) findViewById(R.id.your_image_id);

    DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
    int width = displayMetrics.widthPixels;
    int height = displayMetrics.heightPixels;
    int imageSize = height>width?width:height;

你的配置在这里!

    imageView.getLayoutParams().width = imageSize;
    imageView.getLayoutParams().height = imageSize + (/* additional height logic*/);

您应该将 imageView scaletype 设置为 fitXY 并这样做以按照您想要的方式拉伸图像!

<ImageView
    ...
    android:scaleType="fitXY"
    />
于 2016-08-13T02:58:33.087 回答
0

您是否尝试过在布局文件中使用 scaleType ?

<ImageView
    ...
    android:scaleType="fitStart"
    />

这应该缩放您的图像以适合您的布局顶部,如有必要,可以拉伸或收缩。还没有机会测试(我不记得高度/宽度设置——对不起!),但这可能是一个解决方案。

于 2016-01-04T22:49:41.377 回答