Android - 适合屏幕的水平图像

时间:2013-06-23 19:18:11

标签: android android-layout android-imageview

我有一个Android水平LinearLayout,里面有5张图片。我希望5张图像在保持宽高比的同时水平适合屏幕。每个图像为128x128像素。 问题是虽然宽度设置得像我想要的那样,图像的高度保持不变,所以它们在更大的屏幕上看起来像这样(这是Nexus 7):

enter image description here

我现在拥有的:

<LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:cropToPadding="true"
        android:scaleType="fitXY"
        android:src="@drawable/image01" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:scaleType="fitXY"
        android:src="@drawable/image02" />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:scaleType="fitXY"
        android:src="@drawable/image03" />

    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:scaleType="fitXY"
        android:src="@drawable/image04" />

    <ImageView
        android:id="@+id/imageView5"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:scaleType="fitXY"
        android:src="@drawable/image05" />

</LinearLayout>

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

将scaleType更改为centerInside或fitCenter和height以匹配parent。

答案 1 :(得分:0)

尝试用水平LinearLayout

包围imageview
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" 
        android:layout_weight="1"
        android:layout_gravity="center">

        <ImageView
            android:id="@+id/btnHome"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:tag="btnhome" />

    </LinearLayout>
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" 
        android:layout_weight="1"
        android:layout_gravity="center">
        <ImageView
            android:id="@+id/btnGames"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:tag="btngames" />
    </LinearLayout>
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" 
        android:layout_weight="1"
        android:layout_gravity="center">
        <ImageView
            android:id="@+id/btnNews"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:tag="btnnews"/>
    </LinearLayout>
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" 
        android:layout_weight="1"
        android:layout_gravity="center">
        <ImageView
            android:id="@+id/btnPayment"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:tag="btnpayment"/>
    </LinearLayout>

然后,将scaleType更改为fitCenter。

它会使您的照片具有正确的比例,您可以在更宽的屏幕中查看它。

答案 2 :(得分:0)

我发现了一些代码来创建一个方形视图,然后我可以使用它来渲染我自己的自定义图形。你应该可以这样:

public class SquareImageView extends ImageView {
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
        int height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
        int length = Math.min(width, height);
        setMeasuredDimension(length, length);
    }
}

我没有在LinearLayout中尝试使用此平方代码,但是当使用RelativeLayout时,它首先定位并附加到父级的三个大小,它可以很好地工作。这是希望ImageView对图像做正确的事情,否则你也必须覆盖onDraw()方法。