2013-06-23 150 views
0

我有Android水平LinearLayout與5圖像。我希望5張圖像在保持寬高比的同時水平放置屏幕。每張圖片都是128x128像素。 問題在於,雖然寬度設置像什麼,我想要的圖像高度保持不變,所以他們看起來像這樣一個更大的屏幕上(這是的Nexus 7):Android - 水平圖像,以適應屏幕

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> 

感謝您的幫助

+0

你確定要調整大小 – MDMalik

回答

0

變化scaleType到centerInside或fitCenter和高度來匹配父。

+0

我試過了,但是Android並沒有按比例縮放圖像,即寬度保持不變,只有它們之間會有空格。我需要觸摸圖像。 – user2001951

+0

放大圖像並保持寬高比並非如此簡單。你可能需要手動完成。至於將圖像觸摸到ImageView邊緣,只有centerCrop可以在保持寬高比的同時進行此操作。但是它會剪出圖像的一部分,並且只會在圖像大於圖像視圖時纔會這樣做,不要認爲它適用於較小的圖像。 –

+0

是的,我認爲我會去使用linearlayout上的最小高度,併爲每個屏幕尺寸使用不同的值資源。那就是我現在知道的解決方案。感謝您的答案btw。 – user2001951

0

嘗試以環繞的ImageView與水平的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/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。

它會導致您的照片有一個正確的比例事件,您可以在更寬的屏幕中查看它。

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()方法。