Comment changer de couleur de vecteur dessiné chemin sur le bouton cliquez sur
Avec le nouveau android support de mise à jour, vecteur d'un drawable obtenir de compatibilité descendante. J'ai une image de vecteur avec des chemins différents. Je veux que la couleur de l'chemins de changer de cliquer sur un bouton ou par programmation basée sur une valeur d'entrée. Est-il possible d'accéder au paramètre nom du vecteur de chemin? Et puis changez la couleur.
- vous pouvez la teinte de l'ensemble du vecteur, mais pas sur un seul élément de chemin
Vous devez vous connecter pour publier un commentaire.
L'utiliser pour modifier un chemin d'accès de la couleur dans votre vecteur dessiné
Bibliothèque est ici: https://github.com/devsideal/VectorChildFinder
La couleur de l'ensemble du vecteur peut être modifié à l'aide de setTint.
Vous devez configurer votre ImageView dans votre fichier de mise en page comme ceci:
Puis changer la couleur de votre image:
Remarque:
myImageView.getDrawable()
donne nullpointerexception si le vecteur drawable est définie à l'imageView comme arrière-plan.android:tint
doit être réglé après la miseandroid:src
Button
? Il n'y a pas deandroid:tint
pourButton
.imageView.setColorFilter
Vous pouvez utiliser cette méthode pour changer la couleur dans le bas de l'API de changement de vecteur de couleur du fragment
en place de getActivity vous devez utiliser MainActivity.ce pour le changement de vecteur de couleur dans l'activité
Vous peut changer la couleur de la voie individuelle au moment de l'exécution, sans l'aide de la réflexion.
VectorMaster introduit un contrôle dynamique de vecteur d'un drawable. Chaque et chaque aspect de un vecteur dessiné peut être contrôlé dynamiquement (via Java cas), l'utilisation de cette bibliothèque.
Il suffit d'ajouter la dépendance suivant dans votre application construire.gradle
Dans votre cas, vous avez besoin d'un simple changement de couleur:
Vecteur exemple: your_vector.xml
XML:
Java:
À partir de: https://github.com/harjot-oberai/VectorMaster, sous licence MIT.
Maintenant, vous avez le plein contrôle de vecteur d'un drawable.
GroupModel groupModel = getVectorMasterDrawable().getGroupModelByName("groupName"); ArrayList<PathModel> pathModelArrayList = groupModel.getPathModels();
Il y a plusieurs façons de faire la même chose, mais cela fonctionne pour les deux Vecteur un drawable ainsi que SVG (Local/Réseau).
(changement R. de couleur.headPink avec la couleur de votre choix)
Vérifier ma réponse à cette autre question: https://stackoverflow.com/a/38418049/1335438.
C'est une excellente idée sur la façon de gérer cela à l'aide de Thèmes et de paramétrer les chemins d'accès afin d'être en mesure de les définir de manière dynamique.
Comme indiqué par @Eyal dans ce post
https://stackoverflow.com/a/32007436/4969047
Vous ne peut pas changer la couleur de la voie individuelle au moment de l'exécution.
En regardant le code source de
VectorDrawableCompat
, la seule méthode pour exposer l'intérieur de l'élément de nom estgetTargetByName
qui est présent à l'intérieur privé classe d'étatVectorDrawableCompatState
deVectorDrawableCompat
.Puisque c'est un colis privé (par défaut) - vous ne pouvez pas l'utiliser (sauf si vous utilisez la réflexion).
Vous pouvez atteindre cet objectif sans une bibliothèque, et de combiner des Données de Liaison avec Kotlin.
ButtonBinding.kt
Vous pouvez utiliser directement setCompoundDrawablesWithIntrinsicbounds ou setCompoundDrawables( mais vous devez définir le courant intrinsèque lié, consultez cet article ici
my_fragment.xml
Pour la configuration, cliquez sur l'écoute, vous pouvez le faire en suivant ainsi:
YourFragment.kt
ViewModel.kt
Définir la liaison avec adaptateur entier des ressources au lieu d'utiliser @couleur/ou @drawable. Si vous préférez l'utilisation de @ annotation (e.g:
drawable:start="@{@drawable/id}"
) sur le XML.Changement de la liaison de données comme ceci
Aussi, n'oubliez pas de mettre cette de @aminography
Point Important dans l'Utilisation de Android Vecteur Dessiné
Lorsque vous utilisez un appareil android vecteur dessiné et que vous voulez avoir une compatibilité descendante pour les API ci-dessous 21, ajouter les codes suivants pour
Dans l'app niveau de la construction.gradle:
Dans la classe d'Application:
Grâce à cette réponse ici, @Varun ici expliqué toute autre alternative, l'original de la réponse pour mon cas ici