4

Viewで使用している行がありListViewます。

これRowViewは、水平方向ImageViewの左側とTextView右側の で構成されLinearLayout、画像に 40% のスペースが与えられ、テキストに残りの 60% が与えられます。

ImageViewレイアウトで次の方法で画像のサイズ変更を処理する必要があります。

  1. 画像の 40% を指定していっぱいになるように、画像を水平方向に引き伸ばします。LinearLayout
  2. 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 ImageViewand Overridingを拡張する努力をしなければなりませんか?onMeasure

Matrixそれとも、仕事を終わらせるための巧妙なトリックはありますか?

4

2 に答える 2

0

スケールタイプを完全に取り外します。また、あなたは何をするのか誤解しているかもしれないと思いますsetAdjustViewBounds。イメージがスケーリングされている場合、 のビットマップはスケーリングされますが、ImageViewはスケーリングされませんImageView。true に設定すると、の境界が描画されたビットマップの境界と常に一致setAdjustViewBoundsすることが保証されます。ImageView

于 2013-01-03T05:05:40.780 に答える