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:
- Strecken Sie das Bild horizontal, so dass es füllt 40% des
LinearLayout
- 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:
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 derImageView
, die notwendig ist, das ist, was ich will. Das problem ist keiner, derImageView.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 desImageView
(das machtImageView.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?
- diese Antwort ist für mich arbeiten: stackoverflow.com/a/12283909/888245
- Überprüfen Sie die akzeptierten Antworten: stackoverflow.com/questions/18077325/... Es funktionierte für mich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, das ist das, was du suchst:
Entfernen Sie die Skala Typ völlig. Auch, ich denke, Sie haben vielleicht was falsch verstanden
setAdjustViewBounds
tut. Wenn ein Bild skaliert wird, wird die bitmap in dieImageView
skaliert, aber nicht dieImageView
. EinstellungsetAdjustViewBounds
auf true wird sichergestellt, dass dieImageView
's Grenzen werden immer mit der gezeichneten bitmap Grenzen.ScaleType
nicht skaliert das Bild überhaupt, das ist nicht das, was ich will.setAdjustViewBounds
scheint mir Recht sein, weil ich will, dass die Höhe der Grenzen der der Ansicht nach oben oder unten skaliert als angemessen?