如何更改宽度ImageView以正确的比例?

时间:2016-08-12 10:42:32

标签: android imageview

我有一个带有RelativeLayout的XML文件。在这个RelativeLayout中,我有一个ImageView和一个带有大量视图的LinearLayout(代码中没有显示)。

   <RelativeLayout
        android:layout_weight="1"

        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:id="@+id/imageViewDemo"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:layout_alignTop="@+id/imageViewDemo"
            android:layout_alignLeft="@+id/imageViewDemo"
            android:layout_alignRight="@+id/imageViewDemo"
            android:layout_alignBottom="@+id/imageViewDemo"
            android:gravity="center"

            android:orientation="vertical">

            <!-- A lot of stuff -->

        </LinearLayout>
   </RelativeLayout>

我希望ImageView具有与手机/平板电脑屏幕尺寸相同的宽高比。高度应与父视图匹配,但必须更改宽度以匹配正确的比率。 LinearLayout必须位于ImageView内。我根本找不到合适的解决方案。

1 个答案:

答案 0 :(得分:1)

  

我希望ImageView具有与手机/平板电脑屏幕尺寸之比相同的宽高比。

首先,您应该获得手机/平板电脑的屏幕尺寸,以便计算宽高比。

此代码获得比率:

DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = metrics.widthPixels;
int height = metrics.heightPixels;
final float screenRatio = ((float)width/(float)height);
  

高度应该与父视图匹配,但必须更改宽度以匹配正确的比例。

为此,您应该在代码中更改ImageView的宽度,并在布局中指定高度match_parent

此代码可以帮助您更改宽度:

imageView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        imageView.getViewTreeObserver().removeOnGlobalLayoutListener(this);

        int height = imageView.getHeight();
        int resultWidth = (int)(height * screenRatio);

        ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams();
        layoutParams.width = resultWidth;
        imageView.setLayoutParams(layoutParams);
    }
});

希望这可以帮到你。