2016-07-04 22 views
13

Sostituisco tutte le mie icone con VectorDrawables laddove possibile. Ma ho notato che alcuni di essi non vengono visualizzati correttamente sull'API 23 e che il colore sembra sanguinare. Uno di questi 3 rende bene. Ecco uno screenshot da un isolated project ho creato:VectorDrawable non viene visualizzato correttamente sull'API 23

enter image description here

sembra perfettamente bene su API 21:

enter image description here

The source code of sample app is here

Sto usando AppCompat 24.0.0, app: srcCompat su ImageView e hai impostato vectorDrawables.useSupportLibrary = true. Ho anche provato AppCompat 23.4.0 con destinazione 23. Tuttavia, se rimuovo appCompat e impostato minSdkVersion su 21 e utilizzo il supporto vettoriale nativo, i risultati non cambiano. L'IDE non si lamenta di nulla che non sia supportato. Come faccio a capire qual è il problema? È un bug della piattaforma? Ci sono soluzioni alternative?

+0

bro .. provare a eseguire il downgrade della versione bit alla 23.0.3, anche utilizzando vectorDrawable .. e la sua funzionante in 23. –

+0

Non mi sembra un problema di versione appcompat poiché rimane uguale anche dopo rimuovo appcompat. – gitter

+0

Quale dispositivo (api 23) stai usando? hai provato su emulatore? con il vettore api livello 23 disegnabile utilizzando l'implementazione predefinita di sistema del vettore drawable, direi che molto probabilmente è il problema ROM – Stepango

risposta

15

Prima di tutto, non sono uno sviluppatore Android, sono un designer che collabora con alcuni asset di produzione in Android Studio.

Abbiamo iniziato sperimentando gli stessi problemi con alcuni dei nostri drawable vettoriali da 22 in movimento fino a 24.

(ho aggiornato il mio progetto per utilizzare Nexus 6 API 23 e compilare la versione 24, costruire la versione 24, bersaglio SDK 24. Poi i miei drawable sembrava essere la chiusura percorsi e l'aggiunta riempie simile a quello che sta accadendo qui sopra.)

provato

ho accesso a Adobe Illustrator CC (19.2.1) e hanno esplorato diversi percorso op zioni su un oggetto con un tratto. Tutto da percorsi di espansione a riempimenti, combinazione di percorsi, percorsi composti, percorsi di chiusura, ecc. Senza fortuna.

Converter Opzioni

La SVG online per Drawable Converter (http://inloop.github.io/svg2android/) ha un'opzione, "Cuocere trasforma in percorso (sperimentale)," e Ho selezionato il che e anche se ha migliorato il rendering, è stato NON perfetto ancora.

possibile soluzione

poi sono andato in Illustrator ancora e provato "Salva con nome" SVG contro "Export", come SVG. Non sono sicuro delle differenze tra Adobe Illustrator e le due impostazioni, ma sputano dati XML SVG leggermente diversi.

Poi ho preso il nuovo "Salva con nome SVG" e lasciò cadere questa linea Converter Drawable: http://inloop.github.io/svg2android/

E aveva queste opzioni verifica:

  • Rimuovere i gruppi vuoti senza attributi
  • Bake Trasforma nel percorso (sperimentale)

Il nuovo XML Drawable restituito sembra funzionare ing e rendering correttamente.

Non sono sicuro se questo funzionerà con altri elementi grafici vettoriali con tratti, forme e riempimenti, ma ho pensato di condividere la mia esperienza. Questa non è una soluzione reale, dal momento che sembra essere un bug nel nuovo SDK Android, e lo aveva già supportato in precedenza, ma potrebbe essere un possibile lavoro temporaneo in giro per alcune persone.

+0

Posso confermare che ha funzionato per me con Illustrator CC 20.1.0. Ha dato un senso alla mia giornata! –

+2

Confermo che anche senza usare http://inloop.github.io/svg2android/, il "sa ve as" di Illutrator genrates bene svg ma "export" no. –

+0

Posso confermare che questo ha funzionato per me con http://inloop.github.io/svg2android/. Grazie mille! I dispositivi interessati erano gli emulatori di Android Studio e i dispositivi Samsung (anche su Marshmallow). – Cheruby

8

Ho avuto esattamente lo stesso problema solo sull'API 23. Stavo impostando la mia sorgente ImageView in modo dinamico, piuttosto che in xml. Ho capito che il problema era che stavo facendo:

Drawable show = getContext().getResources().getDrawable(resourceId); 

Quando mi avrebbero dovuto fare:

Drawable show = AppCompatResources.getDrawable(getContext(), resourceId); 

Spero che questo aiuta qualcuno!

+1

Questo era esattamente ciò che ho sbagliato. Grazie per il tuo contributo –

Problemi correlati