Versuchen, die Anzeigegröße eines Bildes in einem ImageView zu ermitteln
Ich versuche, die wahre Größe eines angezeigten Bildes in einem Bild anzeigen. Eigentlich ist mein Bild größer als der Bildschirm ist und die Bildansicht ist die Größenänderung das Bild auf diplay. Ich bin auf der Suche nach dieser neuen Größe.
Habe ich versucht, das überschreiben der onDraw-Methode der Bildansicht in einer benutzerdefinierten Ansicht, aber ich bin nicht immer die richtige Höhe und Breite...
public class LandImageView extends ImageView
{
public LandImageView( Context context )
{
super( context );
}
public LandImageView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public LandImageView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
@Override
protected void onDraw( Canvas canvas )
{
super.onDraw( canvas );
int test = this.getWidth();
int test2 = this.getHeight();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
super.onSizeChanged(w, h, oldw, oldh);
}
}
Haben Sie irgendwelche Anhaltspunkte ?
InformationsquelleAutor der Frage Guillaume Ménant | 2010-10-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Keiner der Antworten hier die Antwort auf die Frage:
Von einem
Bitmap
jeder Größe angezeigt, die von einerImageView
finden Sie die tatsächlichen Abmessungen des dargestellten Bildes im Gegensatz zu den Abmessungen der mitgeliefertenBitmap
.Nämlich:
ImageView.getDrawable().getInstrinsicWidth()
undgetIntrinsicHeight()
werden beide zurück auf die ursprünglichen Abmessungen.Drawable
durchImageView.getDrawable()
und Gießen es in einBitmapDrawable
dann mitBitmapDrawable.getBitmap().getWidth()
undgetHeight()
gibt auch das original-Bild und die Maße.Der einzige Weg, um die tatsächlichen Abmessungen des dargestellten Bildes wird durch das extrahieren und verwenden die transformation
Matrix
verwendet, um das Bild anzuzeigen, wie es gezeigt wird. Dies muss getan werden, nachdem die Messung der Bühne und das Beispiel hier zeigt er rief in einerOverride
vononMeasure()
für eine benutzerdefinierteImageView
:Hinweis:Um das image transformation
Matrix
von code im Allgemeinen (wie in einemActivity
), die Funktion istImageView.getImageMatrix()
- z.B.myImageView.getImageMatrix()
InformationsquelleAutor der Antwort B T
Erweiterte ich B T ' s Antwort zu produzieren, die eine statische Methode aus, und Bild Links und top-Positionen in der Bildansicht :
InformationsquelleAutor der Antwort chteuchteu
Fand ich, dass WarrenFaith 's Vorschlag mit setAdjustViewBounds gearbeitet, aber ich hatte zu ändern, die Bildansicht ist layout_width/layout_height zu "wrap_content" (mit 'match_parent', setAdjustViewBounds Tat nichts). Höhe/Breite/Schwerkraft Verhalten, das ich wollte, musste ich wickeln Sie die Bildansicht in ein FrameLayout:
Danach wird die Bildansicht mit den Abmessungen (zurückgegeben durch getWidth() und getHeight()) übereinstimmen, wird die display-Größe des Bildes.
InformationsquelleAutor der Antwort Squatting Bear
Versuchen
InformationsquelleAutor der Antwort Peter Knego
Ich bin gerade vorbei, aber hoffe es hilft noch
Ich werde unter der Annahme, Sie sprechen von bitmaps in Ihre Bildansicht
was Sie wollen, Sie zu verstehen, ist der Unterschied zwischen
bmpBack.getWidth()
-> dies gibt Ihnen die Größe der bitmap
und
bmpBack.getScaledWidth(canvas)
;-> dadurch erhalten Sie die Größe der bitmap als auf dem Bildschirm angezeigt.
Ich nie benutzt, Bildansicht, weil die relative Anzeige wurde driving me mad, damit ich am Ende nur das überschreiben der onDraw-und habe meine Leinwand sehr ähnlich zu opengl.
Ich denke dies ist dein problem
cheers
Jason
InformationsquelleAutor der Antwort Jason Rogers
Ich denkt, müssen Sie die Größe des sichtbaren Bildes int der Bildschirm ist,, dass Sie einfach brauchen, um dies zu tun:
Und nehmen Sie einen Blick auf die Dokumentation der Methoden, wie:
getWidht()
getHeight()
getMeasuredWidth()
getMeasuredHeight()
usw. Sie erhalten zu wissen, was es tut, um Ihnen, dass Größe.EDIT: Wenn Sie möchten, dass tatsächliche
width
undheight
des Bildes geladen wird in derimageView
. Möchten Sie vielleicht ändern Sie die Methode, die Anrufe vongetMeasuredWidth()
zugetIntrinsicWidth()
undgetMeasuredHeight()
zugetIntrinsicHeight()
wie diese:InformationsquelleAutor der Antwort Ashutosh Tiwari
versuchen überschreiben
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
statt onSizeChanged.InformationsquelleAutor der Antwort bhups
Wenn ich Sie richtig Sie müssen Ihre Bildansicht dimension, um skalieren Sie Ihr Bild entsprechend. Ich Tat dies mit einer benutzerdefinierten Klasse, wo ich das überschreiben der
onMeasure()
Anruf zu bekommen, Breite und Höhe.In onMeasure erhalten Sie die Breite und Höhe für Ihr Bild, so dass es passt Ihre Ansicht.
Können Sie die LandImageView in Ihrem Layout wie dieses:
InformationsquelleAutor der Antwort thumbmunkeys
fügen Sie zunächst die Bilder im ur-Ressource Ordner....... und in der xml-Datei, erstellen Sie eine Bild-Ansicht....
InformationsquelleAutor der Antwort user493244
War ich auf der Suche nach einer Lösung um die dimension der Bild-Ansicht, um das Bild skaliert, um zu verhindern, dass der leere Raum oben/unten oder Links/rechts (Ursache, der dimension der Ansicht nicht geändert, um zu passen das Bild skaliert).
Was ich gefunden habe um den trick zu tun, wurde mit der Methode
mImageView.setAdjustViewBounds(true);
die Ergebnisse im richtigen layout dimension. Ich habe nicht das Bild skaliert dimension, aber ich habe die Ergebnisse, die ich suchte... nur, wenn jemand Sie braucht...InformationsquelleAutor der Antwort WarrenFaith
Laden Sie Ihre Ressource mit BitmapFactory.decodeResource (Ressourcen res, int id, BitmapFactory.Optionen opts) mit der BitmapFactory.Optionen () - Klasse.
BitmapFactory.Options()
hat ein flag namens "inJustDecodeBounds" und gibt nur die Ressource Dimensionen.Hoffe, das hat geholfen.
InformationsquelleAutor der Antwort Uri May
Können Sie Bildansicht ist viewtreeobserver und addonDrawListener.
InformationsquelleAutor der Antwort Satpal Yadav
Wie über die Bildansicht.getBackground () - oder der Bildansicht.getDrawable(), dann Drawable.getBounds()?
InformationsquelleAutor der Antwort Ryan Reeves