检查 Paint 对象在视觉上是否相同
Check whether or not Paint objects are visually the same
想知道有没有好的方法可以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)?
您必须实施自己的检查,也许使用自定义 Comparator
因为 Paint
不会覆盖 equals
和 hashcode
.
在 Paint
class 上有一个隐藏方法叫做: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 和
之间改变
查看 Paint class 实现 here。检查构造函数 Paint(Paint p) 的作用,它设置的属性。有一个隐藏的 API 方法 hasEqualAttributes(Paint p)。也许您可以在您的应用中使用此方法代码。
想知道有没有好的方法可以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)?
您必须实施自己的检查,也许使用自定义 Comparator
因为 Paint
不会覆盖 equals
和 hashcode
.
在 Paint
class 上有一个隐藏方法叫做: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 和
之间改变查看 Paint class 实现 here。检查构造函数 Paint(Paint p) 的作用,它设置的属性。有一个隐藏的 API 方法 hasEqualAttributes(Paint p)。也许您可以在您的应用中使用此方法代码。