Bildansicht bitmap-Skalierung Abmessungen
Ich habe eine Bitmap, die größer ist als die Bildansicht, dass ich bin, dass es in. Ich habe die ScaleType eingestellt center_inside. Wie bekomme ich die Abmessungen des skalierten Bildes?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok. Ich sollte wohl übersichtlicher gewesen. Ich bräuchte die Höhe und Breite der Bitmap skaliert, bevor es jemals auf den Bildschirm gezeichnet, so dass ich ziehen konnte einige overlays in die richtige position. Ich wusste, dass die position des overlays in der original-Bitmap, aber nicht skaliert. Ich fand heraus, einige einfache Formeln zu berechnen, wo Sie gehen sollten, auf die skalierte Bitmap.
Ich erkläre was ich gemacht habe, falls jemand anderes vielleicht eines Tages brauchen.
Ich habe die original-Breite und Höhe der Bitmap. Die Bildansicht Höhe und Breite sind hard-codiert in die xml-Datei bei 335.
Ich bestimmt die eine war größer, so dass ich konnte richtig herausfinden, welche Basis der Berechnungen aus. Für mein Aktuelles Beispiel, die Breite ist größer. Da die Breite wurde verkleinert, um den die Breite der Bildansicht, habe ich feststellen müssen das verkleinerte Höhe. Ich habe gerade multipliziert, die dem Verhältnis der Bildansicht Breite der Bitmap die Breite mal die Bitmap die Höhe. Die Division ist fertig, die letzten, weil Integer-division zunächst würde geführt haben, eine Antwort von 0.
Mit der skalierten Höhe ich kann bestimmen, wie viel leeren Raum auf beiden Seiten des skalierten Bitmap mit:
Bestimmen die x-und y-Koordinaten, wo das overlay sollte gehen Sie auf die skalierte Bitmap habe ich den ursprünglichen Koordinaten und diese berechneten zahlen. Die x-Koordinate in diesem Beispiel ist einfach. Da die skalierte Breite ist die Breite der Bildansicht, ich habe nur mehrfach das Verhältnis der Bildansicht Breite Bitmap Breite mit der original x-Koordinate.
Die y-Koordinate ist ein bisschen schwieriger. Nehmen Sie das Seitenverhältnis der Bitmap skaliert, die Höhe der Bitmap ursprüngliche Höhe. Multiplizieren Sie diesen Wert mit der ursprünglichen y-Koordinate. Fügen Sie dann den leeren Bereich Puffer.
Diese funktioniert, was ich brauche. Wenn die Höhe größer ist als die Breite, nur in umgekehrter Breite und Höhe Variablen.
Hier ist, wie ich es mache:
Können Sie Drawable ist
getIntrinsicWidth()
Höhe oder Methode, wenn Sie möchten, um die ursprüngliche Größe.EDIT: Okay, wenn Sie versuchen, Zugriff auf diese Grenzen in der Zeit onCreate ausgeführt wird, müssen Sie warten, und rufen Sie bis nach der Layoutphase. Während ich nicht wissen, dass dies der beste Weg ist, das ist, wie ich in der Lage gewesen, um es zu erreichen. Im Grunde, einen listener hinzufügen, um die Bildansicht, und erhalten Sie Ihre Abmessungen nur, bevor es auf den Bildschirm gezeichnet. Wenn Sie brauchen, um jede layout-änderungen, die von den Abmessungen können Sie abrufen, sollte man es innerhalb onPreDraw().
Versuchen, diesen code:
Sonst können Sie
onSizeChange()
durch diese Ansicht eine benutzerdefinierte ein.