Comment comparer deux drawables, je fais comme ça mais sans 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
}
}
Réponses:
Mettre à jour https://stackoverflow.com/a/36373569/1835650
getConstantState () ne fonctionne pas bien
Il existe une autre façon de comparer:mRemeberPwd
est unImageView
dans cet exemple. Si vous utilisez unTextView
, utilisez à lagetBackground().getConstantState
place.la source
S'appuyer
getConstantState()
seul peut entraîner de faux négatifs .L'approche que j'ai adoptée consiste à essayer de comparer le ConstantState dans un premier temps, mais à revenir sur une comparaison Bitmap si cette vérification échoue.
Cela devrait fonctionner dans tous les cas (y compris les images qui ne sont pas des ressources) mais notez que la mémoire est gourmande.
la source
getConstantState()
comparaisonsetBounds
etdraw
sur une copie au lieu de l'original stackoverflow.com/a/25462223/1916449Ma question était de simplement comparer deux drawables, j'ai essayé mais je n'ai pas pu obtenir de méthode qui compare directement deux drawables, mais pour ma solution, j'ai changé drawable en bitmap, puis j'ai comparé deux bitmaps et cela fonctionne.
la source
pour SDK 21+
cela fonctionne dans le SDK -21
pour SDK +21 android 5. définissez l'ID drawable sur imageview avec tag
et comparer comme ça
cette solution est pour ceux qui veulent comparer
drawable
id ofimageview
avec id ofdrawable.xxx
.la source
La solution pour Android 5:
la source
getDrawable (int) est désormais obsolète. Utilisez getDrawable (context, R.drawable.yourimageid)
Pour comparer deux arrière-plans
la source
context.getResources().getDrawable(R.drawable.***)
Android 6+ mais n'était pas sur Android 5. Avec ce petit changement, je peux comparer parfaitement les dessinables d'arrière-plan de toutes les versions d'Android.peut-être essayez-le de cette façon:
ou préparez une méthode qui prend deux arguments dessinables et retourne boolean. Dans cette méthode, vous pouvez convertir drawable en octets et comparer,
la source
e.g R.drawable.abc
les deux paramètres?Ok, je pense avoir trouvé la solution ultime pour ça. En raison d'AppCompat et de ses amis, le dessin fourni est parfois gonflé sous différentes formes, il ne suffit donc pas de le faire
getResources().getBitmap(R.drawable.my_awesome_drawable)
.Donc, pour obtenir une instance dessinable du même type et de la même forme que celle fournie par la vue, on peut faire ceci:
Ceci est utile lors des tests. Cependant, je ne recommanderais pas de faire cela en production. Si vous en avez besoin, une mise en cache supplémentaire serait souhaitable pour éviter de trop réfléchir.
Pour les tests Expresso, vous pouvez utiliser ceci très bien:
ou
Avant de devoir déclarer cette classe d'assistance:
la source
la source
J'ai déjà répondu sur le même sujet ici: Obtenez l'ID d'un dessinable dans ImageView . L'approche est basée sur le marquage d'une vue avec un identifiant de ressource spécifié dans le fichier personnalisé
LayoutInflater
. L'ensemble du processus est automatisé par une simple bibliothèque TagView .En conséquence, vous pouvez comparer deux drawables uniquement par leurs identifiants:
la source
En développant la réponse de @vaughandroid, le Matcher suivant fonctionne pour un Vector Drawable teinté. Vous devez fournir la teinte qui a été utilisée pour le Drawable.
la source
Comparez 2 tirables:
Si vous ne trouvez pas
Drawable.toBitmap(...)
ici, c'est Drawable.ktla source
si vous souhaitez comparer directement deux dessinables, utilisez le code suivant
Drawable fDraw = getResources (). GetDrawable (R.drawable.twt_hover);
Drawable sDraw = getResources (). GetDrawable (R.drawable.twt_hover);
la source
Lorsque vous utilisez la
equals()
méthode, elle est utilisée pour comparer le contenu. vous devriez essayer==
de comparer deux objets.la source