La comparaison de deux un drawable dans android
Comment comparer deux un drawable, je fais comme ça, mais n'ayant pas eu de succès
public void MyClick(View view)
{
Drawable fDraw = view.getBackground();
Drawable sDraw = getResources().getDrawable(R.drawable.twt_hover);
if(fDraw.equals(sDraw))
{
//Not coming
}
}
Vous devez vous connecter pour publier un commentaire.
Mise à jour
https://stackoverflow.com/a/36373569/1835650
getConstantState() ne fonctionne pas bien
Il y a une autre façon de comparer:mRemeberPwd
est unImageView
dans cet exemple. Si vous utilisez unTextView
, utilisezgetBackground().getConstantState
à la place.En s'appuyant sur
getConstantState()
seule peut entraîner dans des faux négatifs.L'approche que j'ai pris est d'essayer de comparer la ConstantState en première instance, mais tomber en arrière sur une image Bitmap de comparaison si cette vérification échoue.
Cela devrait fonctionner dans tous les cas (y compris les images qui ne sont pas des ressources), mais noter que c'est la mémoire de la faim.
getConstantState()
comparaisonsetBounds
etdraw
sur une copie et non l'original stackoverflow.com/a/25462223/1916449Ma question était juste pour la comparaison de deux un drawable, j'ai essayé, mais ne pouvait pas obtenir de toute méthode de comparer directement les deux un drawable,cependant pour ma solution que j'ai changé drawable bitmap, puis de comparer deux images et qui est au travail.
pour SDK 21+
cela fonctionne dans le SDK -21
pour SDK +21 android 5.
ensemble drawable id pour imageview avec tag
et de comparer cette
cette solution est pour ceux qui veulent comparer
drawable
id deimageview
avec l'id dedrawable.xxx
.La solution pour Android 5:
peut-être essayer de cette façon:
ou l'élaboration d'une méthode qui prend deux drawable arguments et retourner une valeur booléenne. Dans cette méthode, vous pouvez convertir drawable en octets et de comparer,
e.g R.drawable.abc
que les deux paramètres?getDrawable(int) est Maintenant Obsolète. Utilisation getDrawable(contexte,R. drawable.yourimageid)
Pour Comparer Deux Milieux
context.getResources().getDrawable(R.drawable.***)
sur Android 6+, mais n'était pas sur Android 5. Avec ce petit changement, je peux comparer arrière-plan un drawable à travers toutes les versions d'Android parfaitementOk, je crois que j'ai trouvé la solution ultime pour cela. En raison de AppCompat et amis, le drawable fournis sont parfois gonflés sous différentes formes afin qu'il ne suffit pas de faire
getResources().getBitmap(R.drawable.my_awesome_drawable)
.Donc, afin d'obtenir un drawable instance du même type et de forme prévues par le point de vue, on peut faire ceci:
C'est utile quand on fait des tests. Cependant, je ne recommanderais pas à le faire dans la production. Si vous avez besoin de, supplémentaires de mise en cache serait souhaitable d'éviter de faire trop de réflexion.
Pour Expresso tests, vous pouvez utiliser ce bien:
ou
Avant, vous aurez à déclarer cette classe d'assistance:
J'ai déjà répondu sur le sujet similaire ici: Obtenir l'ID d'un drawable dans ImageView.
L'approche est basée sur le marquage d'une vue avec une ressource spécifiée par l'id dans la coutume
LayoutInflater
. Tout le processus est automatisé grâce à une simple bibliothèque de TagView.Comme un résultat, vous pouvez comparer les deux un drawable simplement par leur id:
si Vous voulez comparer directement les deux drawable puis utilisez le code suivant
Drawable fDraw = getResources().getDrawable(R. drawable.twt_hover);
Drawable sDraw = getResources().getDrawable(R. drawable.twt_hover);
Lorsque vous utilisez
equals()
méthode il est utilisé pour comparer le contenu. vous devriez essayer==
pour la comparaison de deux objets.