Android-Bildansicht - Füllen Sie die Breite und die Größe, um das Seitenverhältnis Beizubehalten

Habe ich eine Zeile View an, dass ich in einem ListView.

Diese RowView besteht aus einem ImageView auf der linken Seite und eine TextView auf der rechten Seite in einer horizontalen LinearLayout wo das Bild ist angegeben 40% der Raum und der text, die restlichen 60%.

Möchte ich das layout zu handhaben, die Größe des Bildes in der ImageView in der folgenden Art und Weise:

  1. Strecken Sie das Bild horizontal, so dass es füllt 40% des LinearLayout
  2. Die Größe der ImageView vertikal zu halten das ursprüngliche Seitenverhältnis

Dies ist mein Ansatz für die layouts:

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);
}

}

Dem Ergebnis bin ich immer so etwas wie dieses:

Android-Bildansicht - Füllen Sie die Breite und die Größe, um das Seitenverhältnis Beizubehalten

Was ich verstehen:

  • Die MATCH_PARENT ist richtig zwingen, das Bild horizontal zu Strecken, um füllen Sie die 40% Platz
  • Die ImageView.setAdjustViewBounds(true) soll zulassen, dass jede änderung der Größe der ImageView, die notwendig ist, das ist, was ich will. Das problem ist keiner, der ImageView.ScaleType's scheinen zu tun, was ich will
  • ImageView.ScaleType(ScaleType.FIT_XY) ist nicht das, was ich will, weil es nicht das Seitenverhältnis beibehalten. Aber für alle anderen, die das tun, scheinen Sie nicht zu dehnen die Höhe des ImageView (das macht ImageView.setAdjustViewBounds(true) ziemlich nutzlos).

Was mache ich falsch? Es scheint falsch, dass etwas so einfaches so schwierig?

Oder habe ich tatsächlich zu gehen, um den Aufwand für die Erweiterung einer ImageView und Überschreiben onMeasure zu zwingen, die Größe und das Seitenverhältnis?

Oder gibt es einen trick, mit Matrix um den job zu erledigen?

InformationsquelleAutor B T | 2013-01-03
Schreibe einen Kommentar