Wie skala Image in Android machen automatisch basierend auf Rasterdichte?
-
20-09-2019 - |
Frage
Ich habe ein Bild setzen auf eine ImageButton
, die gut auf einem MDPI sieht ( mittel dpi ) auf dem Bildschirm. Wenn jedoch das Gerät eine hdpi ( Hoch dpi ) Bildschirm hat, ist das Bild immer noch Pixel-für-Pixel-genau, die auf dem Bildschirm des Geräts klein aussehen.
Wie kann ich machen, so dass das Bild (und damit die ImageButton
) skaliert auf der Grundlage des dichteunabhängige Pixel ( dp oder dip ) anstelle von Pixeln?
Lösung
Wie Ponkin erwähnt, 9-Patches ist die beste Wahl. In Verbindung mit Ressourcenverzeichnis Qualifier (drawable-hdpi
, drawable-mdpi
, etc.) Sie Vermögenswerte, dass gut aussehen zu jeder Dichte und Größe machen.
Ein Beispiel für 9-Patches und Ressourcenverzeichnis Qualifier finden Sie in der finden mehrere Auflösungen Android SDK-Beispiel. Der halb-transparent, schwarz, abgerundete Ecke Hintergrund als 9-Patch mit verschiedenen PNGs für LDPI, MDPI und hdpi umgesetzt wird.
Andere Tipps
android:scaleType="fitXY"
Weitere Optionen sind:
fitStart
fitCenter
fitEnd
center
cenerCrop
centerInside
matrix
Wohlgemerkt, ich bin faul und verwende wirklich große PNG-Bilder in einem rohen Ordner.
IMHO sollten Sie ziemlich nah schauen, um NinePatchDrawable . Es ist eigentlich ein Werkzeug , die Sie Ihr Symbol wird dazu beitragen, (Bilder / icons / was auch immer ...) Größe veränderbar je nach Größe des Behälters. It`s wirklich einfach und funktioniert gut für meine Bedürfnisse. Schauen Sie auch unter diesem Artikel (Teil "NinePatchDrawable"), es erklärt den NinePatchDrawable Mechanismus.
Eine NinePatchDrawable Grafik ist ein dehnbares Bitmap-Bild, das Android wird die Größe automatisch an empfangen den Inhalt der Ansicht in die Sie haben es als die platziert Hintergrund. Ein Beispiel für die Verwendung von a NinePatch ist die verwendeten Hintergründe von Standard-Android-Tasten - Tasten strecken muss Saiten aufnehmen verschiedene Längen. Ein NinePatch ziehbar ist ein Standard, PNG-Bild enthält eine zusätzliche 1-Pixel breite Grenze. Es muss wird mit der Erweiterung .9.png gespeichert, und gespeichert in den res / ziehbar / Verzeichnis Ihres Projekts.
Vielleicht sollten Sie nur angeben Knopfgröße in geräteunabhängig-Pixel?
android:layout_width="300dip"
android:layout_height="50dip"