Con il nuovo aggiornamento del supporto Android, i drawable vettoriali diventano compatibili con le versioni precedenti. Ho un'immagine vettoriale con vari percorsi. Voglio che il colore dei percorsi cambi al clic di un pulsante o programmaticamente in base a un valore di input. È possibile accedere al parametro name del percorso vettoriale? E poi cambia il colore.Come cambiare il colore del tracciabile vettoriale al clic del pulsante
risposta
Consente di cambiare un colore percorso nel vettore drawable
VectorChildFinder vector = new VectorChildFinder(this, R.drawable.my_vector, imageView);
VectorDrawableCompat.VFullPath path1 = vector.findPathByName("path1");
path1.setFillColor(Color.RED);
Library è qui: https://github.com/devsideal/VectorChildFinder
Il colore dell'intero vettore può essere modificato utilizzando setTint.
si deve impostare l'ImageView nel file di layout come questo:
<ImageView
android:id="@+id/myImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tint="@color/my_nice_color"
android:src="@drawable/ic_my_drawable"
android:scaleType="fitCenter" />
Poi per cambiare il colore della vostra immagine:
DrawableCompat.setTint(myImageView.getDrawable(), ContextCompat.getColor(context, R.color.another_nice_color));
Nota: myImageView.getDrawable()
dà NullPointerException se drawable vettore è impostato su imageView come sfondo.
Questa imposta tinta a tutta drawable ma non un percorso specifico del vettore disegnabile. – suku
'android: tint' deve essere impostato dopo aver impostato' android: src' – rupinderjeet
Incredibile! grazie. – tinyCoder
Come affermato da @Eyal in questo post https://stackoverflow.com/a/32007436/4969047
È non può cambiamento del colore del percorso individuale in fase di esecuzione. Guardando il codice sorgente di VectorDrawableCompat
, l'unico metodo per esporre l'elemento interno per nome è getTargetByName
che è presente nella classe privata privata VectorDrawableCompatState
di VectorDrawableCompat
.
Poiché è un pacchetto privato (predefinito) - non è possibile utilizzarlo (a meno che non si usi reflection).
@Shubral, puoi approfondire con il codice su come la riflessione può essere utilizzata per raggiungere questo obiettivo? Potrebbe richiedere del tempo, ma potrebbe aiutare un sacco di persone. – suku
Controlla la mia risposta su quest'altra domanda: https://stackoverflow.com/a/38418049/1335438.
È una grande idea su come gestirlo utilizzando Temi e parametrizzando i percorsi per poterli impostare dinamicamente.
È possibile utilizzare questo metodo per cambiare colore in API inferiore a cambiare colore vettore nel frammento
int myVectorColor = ContextCompat.getColor(getActivity(), R.color.colorBlack);
myButton.getIcon().setColorFilter(myVectorColor, PorterDuff.Mode.SRC_IN);
al posto di getActivity si dovrebbe usare MainActivity.this per cambiare vettore colore nell'attività
È può cambiare il colore del singolo percorso in fase di esecuzione, senza utilizzare il riflesso.
VectorMaster introduce il controllo dinamico sui drawable vettoriali. Ogni aspetto di un vettore disegnabile può essere controllato dinamicamente (tramite istanze Java), utilizzando questa libreria.
Basta aggiungere il seguente dipendenza nel build.gradle della tua applicazione
dependencies {
compile 'com.sdsmdg.harjot:vectormaster:1.0.9'
}
Nel tuo caso avete bisogno di un semplice cambiamento di colore: ad esempio
Vettore: your_vector.xml
<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:name="outline"
android:pathData="M20.84,4..."
android:strokeColor="#5D5D5D"
android:fillColor="#00000000"
android:strokeWidth="2"/>
XML:
<com.sdsmdg.harjot.vectormaster.VectorMasterView
android:id="@+id/your_vector"
android:layout_width="150dp"
android:layout_height="150dp"
app:vector_src="@drawable/your_drawable" />
Java:
VectorMasterView heartVector = (VectorMasterView)
findViewById(R.id.your_drawable);
// find the correct path using name
PathModel outline = heartVector.getPathModelByName("outline");
// set the stroke color
outline.setStrokeColor(Color.parseColor("#ED4337"));
// set the fill color (if fill color is not set or is TRANSPARENT, then no fill is drawn)
outline.setFillColor(Color.parseColor("#ED4337"));
Da: https://github.com/harjot-oberai/VectorMaster, sotto licenza MIT.
Ora hai il pieno controllo sui drawable vettoriali.
Ci sono diversi modi di fare le stesse cose, ma questo funziona per entrambe le Vector drawable nonché SVG (Locale/Rete).
imageView.setColorFilter(ContextCompat.getColor(context,
R.color.headPink), android.graphics.PorterDuff.Mode.SRC_IN);
(cambia R.color.headPink con il colore della vostra scelta)
- 1. Posso cambiare il colore del pulsante Bootstrap?
- 2. Cambiare colore pulsante al programmatore
- 3. Come cambiare il colore del tasto ttk
- 4. SVG - Cambia colore di riempimento al clic del pulsante
- 5. Come posso cambiare il colore predefinito del pulsante su iPhone?
- 6. Come cambiare il colore del pulsante di attivazione/disattivazione?
- 7. Come cambiare il colore del passaggio del mouse del menu
- 8. Come cambiare il colore della png al passaggio del mouse?
- 9. Come cambiare il colore di un'immagine al passaggio del mouse
- 10. Pulsante Disabilita al momento del clic
- 11. JS document.getElementById esegui al clic del pulsante
- 12. Come posso cambiare il colore di un pulsante al passaggio del mouse?
- 13. Android: come gestire il clic del pulsante
- 14. Graphviz: Come cambiare il colore del bordo
- 15. Cambiare il colore del testo in Eclipse
- 16. Cambia altezza div al clic del pulsante
- 17. Utilizzo del pulsante di avvio per cambiare il colore del pulsante
- 18. pulsante di avvio al clic che mostra il colore predefinito
- 19. Come cambiare il colore del titolo di UIButton quando si fa clic?
- 20. L'evento ng-clic non viene attivato al clic del pulsante?
- 21. jQuery che impedisce il postback al clic del pulsante
- 22. come cambiare il colore del bordo del layout relativo?
- 23. Come cambiare il colore del testo del pulsante UIAlertController in iOS9?
- 24. Come cambiare il colore del bordo del pulsante di opzione in Android?
- 25. Chiamare il metodo asincrono al clic del pulsante
- 26. È possibile cambiare il colore del cerchio centrale del pulsante radio selezionato
- 27. Impossibile cambiare il colore del testo UILabel
- 28. Come posso cambiare il colore del titolo UIButton?
- 29. Visual Studio C# Windows Forms ... cambia il colore del pulsante?
- 30. Come chiamare o pop-up frammento al clic del pulsante
è possibile colorare l'intero vettore, ma non singoli componenti del percorso – Blackbelt