Wie erhält man die ursprünglichen Abmessungen eines an ImageView übergebenen Bildes?

Ich versuche, ImageView von der Unterklasse zu trennen, um eine benutzerdefinierte Ansicht zu erstellen.

public class MyImageView extends ImageView

Now I pass to MyImageView an image via setImageResource(int resId)

Jetzt muss ich die ursprünglichen Abmessungen des Bildes erhalten,

Ich muss das innerhalb von MyImageView tun, damit ich die Dimension für meine Implementierung von onDraw() verwenden kann.

Wie mache ich das?

0
@Stan deins ist der wertvollste Vorschlag bisher. Vielen Dank!
hinzugefügt der Autor Lisa Anne, Quelle
@Stan, ja, mach es
hinzugefügt der Autor Lisa Anne, Quelle
Haben Sie getIntrinsicHeight und getIntrinsicWidth von Drawable ausprobiert?
hinzugefügt der Autor Stan, Quelle
@LisaAnne, ich kann es als Antwort posten, damit du es akzeptierst.
hinzugefügt der Autor Stan, Quelle
@LisaAnne, fertig. Warum können wir hier nicht über Avatare abstimmen? ;-)
hinzugefügt der Autor Stan, Quelle
Bitmap b = ((BitmapDrawable) imageView.getBackground ()). GetBitmap (); int w = b.getWidth (); int h = b.getHeight ();
hinzugefügt der Autor Anil kumar, Quelle

3 Antworten

Android Drawable bietet < code> getIntrinsicHeight und getIntrinsicWidth Methoden, die eine bevorzugte ("echte", in gewissem Sinne) Größe eines zugrunde liegenden Zeichnungsobjekts zurückgeben sollen, wenn es überhaupt ein Größenattribut unterstützt. Ich nehme an, dass sie in Ihrem Fall so weit funktionieren sollten, wie Sie echte Bilder lesen, aber wenn sie dies aus irgendeinem Grund nicht tun (dh -1 zurückgeben), könnte es möglich sein, Bild-Header zu parsen (z. B. Bitmap-Header oder SVG) Dokument manuell oder mit vorhandenen Bildbibliotheken) oder speichern Sie eine Karte mit den Dimensionen Ihrer Grafikressourcen und den Ressourcen selbst.

0
hinzugefügt

Bitmap-Bild = BitmapFactory.decodeResource (getResources (), R.drawable.yourBitmap);

Then try image.getWidth and image.getHeight()

UPDATE

Sie können decodebounds true setzen und diese Grenzen übergeben, um Dimensionen zu erhalten, ohne ganze Bitmap zu decodieren

0
hinzugefügt
Thaks Arju, aber ich muss aus der Unterklasse herauskommen
hinzugefügt der Autor Lisa Anne, Quelle
Sie können das von überall bekommen und den Kontext einfach weitergeben
hinzugefügt der Autor Viswanath Lekshmanan, Quelle
poste deinen Unterklassencode
hinzugefügt der Autor Viswanath Lekshmanan, Quelle
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
int height = bitmap.getHeight();
int width = bitmap.getWidth();
0
hinzugefügt
Thaks Birdy aber ich muss aus der Unterklasse herauskommen
hinzugefügt der Autor Lisa Anne, Quelle
Sie können Bitmap bitmap = ((BitmapDrawable) getDrawable ()) aufrufen, um Bitmap zu erhalten
hinzugefügt der Autor birdy, Quelle