我想知道Paint
比较是否有一个好的方法。
例如,考虑以下代码:
Paint paint1 = new Paint();
paint1.setColor(Color.BLUE);
Paint paint2 = new Paint(paint1);
Paint paint3 = new Paint(paint1);
paint3.setColor(Color.YELLOW);
在这种情况下,我想编写一些这样的代码:
paint1
与paint2
paint1
和paint2
与paint3
不同。当然,您不能使用paint1 == paint2
,因为它们是两个不同的对象。另外,看来paint1.equals(paint2)
无效。
有办法吗?还是应该单独比较我认为重要的属性(例如颜色,alpha,strokeCap)?
答案 0 :(得分:1)
查看Paint类实现this。检查构造函数Paint(Paint p)的功能,设置的属性。有一个隐藏的API方法hasEqualAttributes(Paint p)。也许您可以在应用程序中使用此方法代码。
答案 1 :(得分:0)
您可能必须使用自定义Comparator
来实现自己的检查,因为Paint
不会覆盖equals
和hashcode
。
Paint
类中有一个隐藏方法,称为:hasEqualAttributes(@NonNull Paint other)
这可以通过反射来使用:
Paint paint1 = new Paint();
paint1.setColor(Color.BLUE);
Paint paint2 = new Paint(paint1);
Paint paint3 = new Paint(paint1);
paint3.setColor(Color.YELLOW);
try {
final Method method = paint1.getClass().getDeclaredMethod("hasEqualAttributes", Paint.class);
final boolean equal = (boolean) method.invoke(paint1, paint2);
final boolean equal2 = (boolean) method.invoke(paint2, paint3);
Log.i("TAG", "Has equal attributes : " + equal);
Log.i("TAG", "Has equal attributes : " + equal2);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
输出:
Has equal attributes : true
Has equal attributes : false
但是强烈建议不要这样做,因为实现可以在API的不同之间进行更改