比较两个可绘制对象中的资源

9

我试图比较两个drawable,但没有成功。我做了一些研究,甚至有一个类似的问题,但没有帮助。

在我的应用程序中,我使用getCompoundDrawablesWithIntrinsicBounds来获取EditText中ImageView的正确位置。然后我需要检查哪个图像资源被分配在那里。

这个小样本应该可以工作,不是吗?尽管如此,它返回“不相等”。

Drawable drawable1 = ContextCompat.getDrawable(getApplicationContext(),R.drawable.cor);

Drawable drawable2 = ContextCompat.getDrawable(getApplicationContext(),R.drawable.cor);


if(drawable1 == drawable2){
     System.out.println("equal");
}else{
     System.out.println("not equal");
 }

你是在一个ImageView上应用这些可绘制对象吗? - Adeel Shahzad
https://dev59.com/QWox5IYBdhLWcg3wklCE - sasikumar
1个回答

13

getConstantState方法不能很好地工作

如果你这样做: if(drawable1 == drawable2){

你正在比较对象的引用,而这不是正确的方式...

相反,使用带有getConstantState()方法的equals方法...

更新 尝试使用字节或像素进行比较是通常有效的唯一方法。

 // Usage: 
 drawable1.bytesEqualTo(drawable2) 
 drawable1.pixelsEqualTo(drawable2) 
 bitmap1.bytesEqualTo(bitmap1) 
 bitmap1.pixelsEqualTo(bitmap2) 

https://gist.github.com/XinyueZ/3cca89416a1e443f914ed37f80ed59f2


1
我会尝试一下,虽然我不熟悉这种方法。它确切地是做什么的? - AndroidDev
2
测试过了,它仍然存在SVG的误报情况。 - cauende

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接