2011-03-18 83 views
70

我在LinearLayout中有幾個ImageView。我需要縮小ImageView,以便在垂直嵌入LinearLayout的同時保持縱橫比。水平地,我只是需要他們彼此相鄰。Android ImageView大小與源圖像無法縮放

我做了一個簡單的測試牀,這裏面嵌套加權佈局,使我有一個廣泛的,但個子不是很高,LinearLayout中的ImageViews -

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="5"> 
     <LinearLayout android:id="@+id/linearLayout3" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"> 
      <ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView> 
      <ImageView android:id="@+id/imageView2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView> 
     </LinearLayout> 
     <LinearLayout android:id="@+id/linearLayout4" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"></LinearLayout> 
    </LinearLayout> 
    <LinearLayout android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"></LinearLayout> 
</LinearLayout> 

(在Eclipse佈局編輯器中的圖像垂直裁剪並且完全不縮放 - 但這只是我們學會愛的那些特質之一)

在硬件上運行時,圖像縮放到正確的高度,同時保持其縱橫比。我的問題是,他們不是彼此相鄰。每個ImageView的高度正確匹配LinearLayout的高度。每個ImageView的寬度是未縮放圖像的寬度 - 實際縮小的圖像出現在ImageViews的左側。正因爲如此,我在圖像之間出現了很大的差距。

理想情況下,我想通過XML來管理這一點,但如果這是不可能的,我明白使用自定義視圖可能是最好的解決方案。

我試着創建一個覆蓋onMeasure的IconView(擴展ImageView)類,以便通過根據高度縮放寬度來創建必要尺寸的圖像視圖。但傳遞給函數的parentWidth和parentHeight是屏幕的尺寸,而不是LinearLayout容器的尺寸。

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    int parentWidth = MeasureSpec.getSize(widthMeasureSpec); 
    int parentHeight = MeasureSpec.getSize(heightMeasureSpec); 
    // Calculations followed by calls to setMeasuredDimension, setLayoutParams 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

所以我的問題是 -

1)我可以修改XML以某種方式讓它做什麼,我需要?

2)如何讓我的自定義類獲取LinearLayout的高度,以便我可以計算自定義圖像的必要寬度?

謝謝,如果你已經設法閱讀這一點。如果您能指出我的解決方案,更要感謝!

+1

非常感謝,我有一個類似的問題:我想要的只是一張應用頂部的圖片,使用全寬。由於某些未知原因,imageView幾乎是圖像本身的兩倍,阻止了寶貴的屏幕空間。感謝addding'android:adjustViewBounds =「true」'將高度調整爲圖像 – dave 2011-07-08 12:57:16

+0

@dave默認情況下,android :: adjustViewBounds沒有設置爲true。我很高興你的問題現在被排序。 – Rok 2011-07-09 07:57:52

+0

謝謝你的男人!給我的老闆保存了一些棒! – 2015-12-11 15:22:51

回答

245

如何將您的ImageViews更改爲使用android:layout_height="fill_parent"

編輯 - 花了我一段時間才發現,但看着源頭幫我找到了adjustViewBounds。您可能想要嘗試將android:adjustViewBounds="true"添加到ImageViews中。令人驚訝的是,這默認爲false。

+6

將layout_height更改爲fill_parent沒有什麼區別,但將adjustViewBounds設置爲true取得了訣竅!我很驚訝我已經做了很多與各種意見的工作,並設法不注意這個參數!謝謝:) – Rok 2011-03-18 17:13:00

+1

我也是。我曾假設它會默認爲真,但不知何故從未遇到過這個問題。 – 2011-03-18 17:15:21

+2

太棒了! android:adjustViewBounds =「true」的作品! – AVEbrahimi 2012-12-29 12:30:08

10

奇怪的是android:layout_height="fill_parent"android:adjustViewBounds="true"沒有幫助。我遇到的問題是顯示圖像,但圖像底部有塊排,黑色排。將刻度類型設置爲"centerCrop"幫助了我。我想,原因是我的圖像尺寸很小。

6

我有類似的問題,我的解決方案是在XML佈局文件中設置ImageView的android:scaleType="fitEnd"屬性。

+6

這解決了我的問題..其實'android:scaleType =「fitXY」' +1給你.. :) – 2014-09-12 12:35:29

+0

感謝您的評論@MiteshShah,'fitXY'結束了爲我工作! – ehehhh 2015-12-10 13:57:17