View
で使用している行がありListView
ます。
これRowView
は、水平方向ImageView
の左側とTextView
右側の で構成されLinearLayout
、画像に 40% のスペースが与えられ、テキストに残りの 60% が与えられます。
ImageView
レイアウトで次の方法で画像のサイズ変更を処理する必要があります。
- 画像の 40% を指定していっぱいになるように、画像を水平方向に引き伸ばします。
LinearLayout
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);
}
}
私が得ている結果は次のようなものです:
私が理解していることから:
- は
MATCH_PARENT
、40% のスペースを埋めるために画像を水平方向に正しく引き伸ばしています。 - は
ImageView.setAdjustViewBounds(true)
、必要なサイズ変更を許可するはずImageView
です。これは、私が望むものです。問題は、ImageView.ScaleType
のどれも私が望むことをしていないようです ImageView.ScaleType(ScaleType.FIT_XY)
縦横比が維持されないため、私が望むものではありません。しかし、そうする他のすべてのものは、の高さを伸ばすようには見えませんImageView
(これはImageView.setAdjustViewBounds(true)
ほとんど役に立たないことです)。
私は何を間違っていますか?これほど単純なことが非常に難しいというのは間違っているように思えますか?
または、サイズ変更とアスペクト比を強制するために、実際に an ImageView
and Overridingを拡張する努力をしなければなりませんか?onMeasure
Matrix
それとも、仕事を終わらせるための巧妙なトリックはありますか?