2011-09-16 64 views
0

所以我有這個任務來創建一個圖像按鈕的水平滾動陣列,基本上是用戶的照片頭像。這些化身不受長寬比或大小的限制,所以我一直在玩弄縮放和格式化的方式。我已經通過scaletype =「fitCenter」並使用靜態寬度和高度將它們縮放。但我真正想讓他們做的是互相對抗。目前,如果圖像高於高度,則可以使用letterboxing,但在側面與頂部(空白區域)對齊。我已經嘗試了所有不同的縮放比例值,將每個圖片包裹在一個線性佈局等內,但我沒有試過似乎擺脫這些(同時顯示整個圖像以縮放比例)。有沒有辦法做到這一點?在Android中縮放/格式化多個圖像按鈕陣列

+0

此外,還有一個寬於高的頂部/底部字母框。我的靜態寬度和高度是相同的。 –

回答

0

只是爲了重申一下,我認爲你做的,你有三種圖像場景:

  1. 廣場形象
  2. 景觀圖像(不是高大寬)(比寬高)
  3. 人像圖像

使用FIT_CENTER佈置一排固定尺寸的ImageViews(或ImageButtons)對於您所需要的圖像很有用,如果所有圖像都是正方形或橫向的,因爲縮放總是會使圖像伸展到視圖的水平邊界(最大尺寸)。但是,使用縱向圖像時,縮放會使視圖位於固定大小視圖的邊界內,以便可以看到整個圖像高度。

如果您需要保持圖像的寬高比,實際上沒有ScaleType來幫助解決這個問題,因爲邏輯將是圓形的(適合圖像的視圖,同時使圖像適合視圖)。解決方案是調整每個ImageView的大小(特別是寬度),以匹配圖像將縮放的大小。下面是一個工廠方法的示例,您可以使用它來生成ImageView以適應要放入其中的圖像。你也可以修改這個稍微對現有的ImageView重置參數,如果你喜歡:

private ImageView getImageViewForThumbnail(Bitmap thumbnail) { 
    float viewHeight = //Your chosen fixed view height 
    float scale = ((float)thumbnail.getHeight())/viewHeight; 
    float viewWidth = thumbnail.getHeight()/scale; 

    ImageView view = new ImageView(this); 
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int)viewWidth, (int)viewHeight); 
    view.setLayoutParams(params); 
    view.setScaleType(ScaleType.FIT_XY); 
    view.setImageBitmap(thumbnail); 

    return view; 
} 

你基本上只是計算的ImageView方面寬度應該是什麼,以配合您所選擇的所有固定的高度其中。

HTH

+0

謝謝,我擔心這將是唯一真正的方法。 –

0

使用scaleType fitXY,它會將圖像拉伸到您分配的佈局參數(如果圖像的維數較少並且還會將圖像縮小爲您分配的佈局參數(如果圖像較大)。關鍵是要提到imageView的圖像佈局參數,即圖像的寬度和高度。

+0

好的,我試過fitXY,但它不能正確縮放圖像。問題是我正在爲圖像尺寸(或圍繞它的線性佈局)輸入靜態值,我想我的問題是,是否有任何方法來縮放這些圖像而不在右側或左側添加空間(對於肖像圖像)或頂部和底部(對於風景圖片),但不知道圖像的尺寸是什麼?我們是否需要編寫一些代碼來查看圖像屬性,然後計算適當的寬度以使比例尺正確? –

+0

我想你應該嘗試將靜態值分配給imageView,根據文檔,「fitXY」應該可以工作,如果你想讓圖像在x和y上獨立縮放,請檢查這兩個鏈接。http://developer.android.com/reference/android/小部件/ ImageView.ScaleType.html使用FILL描述在這裏http://developer.android.com/reference/android/graphics/Matrix.ScaleToFit。html#FILL –