2013-01-03 78 views
4

我有一排View,我在ListView中使用。Android ImageView - 填充寬度和調整大小以保持長寬比

RowView這由在左邊的ImageView和在水平LinearLayout其中圖像被給予的空間和文本剩餘的60%的40%在右側TextView的。

我想要的佈局來處理圖像在ImageView調整大小以下列方式:水平

  1. 伸展圖像,使其填滿的LinearLayout
  2. 給予40%調整的ImageView垂直保持原有的縱橫比

這是我的方法來佈局:

protected class RowView extends LinearLayout { 
public ImageView iv = null; 
public TextView tv = null; 

private LinearLayout.LayoutParams ivlp = null; 
private LinearLayout.LayoutParams tvlp = null; 

public RowView(Context ct) { 
    super(ct); 

    setOrientation(LinearLayout.HORIZONTAL); 

    // Create the views 
    iv = new ImageView(ct); 
    ivlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 0.4f); 
    iv.setLayoutParams(ivlp); 
    iv.setAdjustViewBounds(true); 
    iv.setScaleType(ScaleType.FIT_XY); 

    tv = new TextView(ct); 
    tvlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 0.4f); 
    tv.setLayoutParams(tvlp); 
    tv.setGravity(Gravity.CENTER_VERTICAL | Gravity.RIGHT); 

    // Add the views 
    addView(iv); 
    addView(tv); 
} 

}

我得到的結果是這樣的:

enter image description here

從我的理解:

  • MATCH_PARENT正確迫使圖像水平拉伸填滿40%的空間
  • ImageView.setAdjustViewBounds(true)應該允許任何調整大小的ImageView這是必要的,這是我想要的。問題是沒有一個ImageView.ScaleType似乎做我想要的
  • ImageView.ScaleType(ScaleType.FIT_XY)是不是我想要的,因爲它不保持縱橫比。但所有其他人都這麼做,似乎並沒有拉高ImageView(這使得ImageView.setAdjustViewBounds(true)幾乎沒用)。

我在做什麼錯?這種簡單的事情可能如此困難似乎是錯誤的?

還是我實際上不得不努力擴展ImageView和覆蓋onMeasure來強制調整大小和縱橫比?

還是有一個巧妙的把戲Matrix完成工作?

+0

這種反應是爲我工作:http://stackoverflow.com/a/12283909/888245 – OriolJ

+0

檢查接受的答案:HTTP://堆棧溢出。COM /問題/ 18077325 /縮放圖像來一補-imageview的寬度並保持的縱橫比 它爲我工作。 – StarDust

回答

0

完全去除刻度類型。另外,我想你可能誤解了setAdjustViewBounds。如果縮放圖像,則會縮放ImageView中的位圖,但不是ImageView。將setAdjustViewBounds設置爲true將確保ImageView的邊界將始終與繪製的位圖的邊界相匹配。

+1

我已經試過了,但它並沒有達到我想要的。我希望它能夠縮小,以便填滿整個行的40%。去除'ScaleType'根本不會縮放圖像,這不是我想要的。 'setAdjustViewBounds'似乎正確的我,因爲我想要的視線的高度範圍來放大或縮小爲合適? –

3

我相信這是你在找什麼:

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/myImage" 
    android:scaleType="fitCenter" 
    android:adjustViewBounds="true" /> 
+0

非常感謝你的答覆! – itzhar

相關問題