Wie, um die Größe der Vektor-drawable innerhalb von ein button in Android?
Android Studio Vektor-Elemente tools konvertieren von Vektor-drawable PNG-s für Geräte pre-Lollipop, aber ich bekomme wirklich schlechte Qualität PNG-s, wie man hier sehen kann:
Was mehr ist, dass der button-hintergrund einfarbig sein soll ist das Licht grün wird, sehen Sie auf der linken Seite, aber die drawable überschreiben:
<item android:state_checked="true"
android:drawable="@drawable/show">
<shape android:shape="rectangle">
<corners android:bottomRightRadius="8dp"/>
<solid android:color="@color/waveComponentGreen"/>
</shape>
</item>
<item android:state_checked="false"
android:drawable="@drawable/hide">
<shape android:shape="rectangle">
<corners android:bottomRightRadius="8dp"/>
<solid android:color="@color/waveComponentGreen"/>
</shape>
</item>
Den xml-Code für die drawable ist (der Standardwert aus der material-icons):
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M8.59,16.34l4.58,-4.59 -4.58,-4.59L10,5.75l6,6 -6,6z"/>
Wollte ich eigentlich auch machen, das icon erscheint ein bisschen kleiner durch anpassen der Werte, und ich bemerkte eine Erhöhung der viewport-Abmessungen sinkt das icon-aber ich bin mir nicht sicher, ob ich verstehe, warum.
Also: Wie mache ich das Symbol und die erzeugten PNG, kleiner erscheinen, weniger verschwommen und mit der hintergrund Farbe einstellen, in der Ressourcen-Datei? Danke.
BEARBEITEN: ich schaffte es, den einfarbigen hintergrund mit dem Symbol, indem Sie kombinieren Sie in einer separaten xml-Datei mit layer-Listen:
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle">
<corners android:bottomRightRadius="10dp"/>
<solid android:color="@color/waveComponentGreen"/>
</shape>
</item>
<item android:drawable="@drawable/show"
android:top="10dp"
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
/>
Ist das Ergebnis:
Ich es geschafft, verringern Sie die Unschärfe, die durch die Erhöhung der Breite und Höhe des Vektor-drawable. Allerdings ohne die android:top|bottom|left|right
tags, die drawable wird gestreckt über die gesamte Fläche der Taste. Der zweite button nicht benötigen, um einen hintergrund einfarbig, also bin ich nicht mit der layer-Liste-tags => keine Möglichkeit ein top|bottom|left|right
Marge für die drawable.
Wenn ich reduzieren Sie die Größe der Schaltfläche, was ich Tue, ist die Verringerung der anklickbaren Bereich der Schaltfläche.
Meine aktuelle Frage ist, wie die Größe des Vektors drawable in einer Schaltfläche/Umschaltfläche/Optionsfeld ohne die Reduzierung der Größe der Schaltfläche selbst?
UPDATE
Ich konnte nicht einen Weg finden, um die Größe des Vektor-drawable auf pre-API-21-Geräte. Anstatt also machte ich die Knöpfe selber kleiner und erhöht die touch-Oberfläche der einzelnen Tasten.
- Der viewport ist der Raum, in der das Symbol gezeichnet wird, und die pathData gibt die verschiedenen Koordinaten anweisen, was die Form sein sollte. Wenn, zum Beispiel, Sie hatten einen viewport von 24 durch 24 und ziehe eine gerade Linie von 0,12 Punkt-zu-Punkt 24,12, dann ist das eine horizontale Linie auf halbem Weg nach unten Ihre viewport von einer Seite auf die andere. Wenn Sie die viewport-Größe 48 von 48 aber deine Linie ist immer noch von 0,12 Punkt-zu-Punkt 24,12 dann ist es nicht beginnend auf halbem Weg nach unten mehr und es wird nicht zu erreichen die andere Seite des Ansichtsfensters.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den richtigen Ansatz zu skalieren alle drawable wäre, die Nutzung
vectorDrawable.setBounds(left,top,right,bottom)
,aber leider klappt das nicht für Vektor-drawables (warum Google ?).
So als workaround, lade ich meine Vektor-drawables , konvertieren Sie bitmap-drawable und das wird es uns ermöglichen, verwenden Sie die
setBounds
Methode auf die bitmap-drawable. Beachten Sie, dass die Skalierung von bitmaps hier , so können Sie verlieren einige Schärfe des Bildes. Hauptsächlich verwende ich diese Methoden, wenn ich brauche, um meine drawable als Verbindung drawable einer text-Ansicht oder einer Taste, zum Beispiel.Landete ich schreiben eine Hilfsklasse das laden eines Vektor-drawable-set einen Farbton, um es und schicken Sie ein bitmap-drawable, dass Sie kann tatsächlich skalieren und färben, wie Sie wollen. Ich habe es getestet für API Level 19 bis 23 , und es funktioniert.
Vergessen Sie nicht, verwenden
vectorDrawables.useSupportLibrary = true
in Ihrem bauen.gradle.Nun würde ich diese helper-Klasse wie folgt aus :
Ist es wichtig, einen Kontext, eine Ansicht oder Aktivität, nicht den Anwendungskontext!
Hoffe, es wird Ihr problem lösen, oder jemand anderes helfen. Und wenn jemand eine bessere und sauberere Lösung, ich bin daran interessiert zu wissen, wie gut.
MyTextView Klasse:
attrs.xml:
Verwendung:
Hinweis: Das einzige Problem hier ist, dass eine unveränderte Vektor(
drawableWidthHeightCompatTextView
noch nicht verwendet), die vectorwidth
undheight
sind 24,Ist nicht gleich groß, auf dem Gerät mit der Größe verändert vector(vector
width
undheight
sind 12 unddrawableWidthHeightCompatTextView="24"
).