2016-11-25 14 views
0

Ich möchte alle .PNG Ressourcen (Symbole) in meinem Projekt mit Vektorversionen ersetzen. Und damit dies so effizient wie möglich ist, wollte ich doppelte Bilder aufgrund unterschiedlicher Zustände vermeiden (wie bei "aktiven" und "inaktiven" Versionen desselben Symbols).Einzelne Vektorressource mehrere Tönungen

Früher habe ich das mit separaten PNG-Dateien für jede Version gemacht: ein opak "aktiv" und leicht transparent "inaktiv".

Die Frage ist also, ist es möglich, einige XMLs zu erstellen, die auf ein einzelnes Vektorbild (vorzugsweise) verweisen, aber unterschiedliche Farben/Farbtöne darauf anwenden? Oder zumindest verschiedene Alpha-Werte wären genug.

P.S. Meine minSDK-Version ist 19, wenn es darauf ankommt.

UPDATE_01: Ich denke, ich muss in ein bisschen mehr Details erklären. Vektorressourcen funktionieren wie erwartet (alle Vorbereitungen sind für compat lib getroffen, um Vektoren nach Bedarf zu zeichnen).

Das Hauptproblem besteht darin, ein einziges Vektorsymbol und mehrere Referenzen davon mit verschiedenen Farben/Alphas in separaten XMLs zu verwenden. Und verwenden Sie diese XML-Dateien wo nötig (auf der Symbolleiste, Schaltflächen, Status, etc.).

UPDATE_02: Vielleicht und Beispiel wäre besser.

Ich habe einen Vektor ziehbar eines „home“ Symbol, das wie folgt aussieht:

<vector 
    android:height="24dp" 
    android:viewportHeight="792.0" 
    android:viewportWidth="792.0" 
    android:width="24dp" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <path 
     android:fillColor="#FF000000" 
     android:pathData="..."/> 
</vector> 

Was ich will, ist den gleichen XML-Vektor ziehbar zu verwenden, aber mit unterschiedlichen Tönungen für „aktiv“ und „inaktiv "Zum Beispiel in den Registerkarten eines Seitenadapters.

Was ich jetzt dafür mache, dupliziere dieses XML und ändere seinen "android: fillColor" -Wert.

Muting es (in Code) in allen Orten, die es verwendet wird, ist eine Möglichkeit, aber nicht sehr gut aus meiner Sicht. Vielleicht gibt es einen anderen Weg? So etwas wie diese (pseudo):

<image-reference 
    android:srcDrawable="@drawable/home_icon" 
    android:tint="@color/activeHomeIcon" /> 

Und dann benutzen Sie einfach diesen „home_icon_ref.xml“ überall als ziehbar Quelle.

Hoffe das macht meine Frage diesmal klarer.

+1

'DrawableCompat # setTintList' – pskink

+0

API <21, dann müssen Sie in jeder Aktivität hinzufügen, wo Sie verwenden Vektor drawable.- -> static { AppCompatDelegate.setCompatVectorFromResourcesEnabled (true); } –

+0

Ich denke, ich sollte mehr Details zum Thema hinzufügen. Siehe mein Update. –

Antwort

0

Statt in separaten XML-Ressourcen verwenden Sie programmatisch in Ihrem Java ändern code.Follow this SO post

+0

Wenn ich richtig verstehe, muss ich muting in Code zu jeder Ansicht hinzufügen, die dieses Bild in allen Fragmenten und Aktivitäten verwendet. Nicht sehr praktisch. –

Verwandte Themen