我试图做一些if语句,这部作品在机器人的每个版本(16或更高,因为getDrawable的),除了安卓L(在最新的测试)。 代码如下:
if (item.getIcon().getConstantState().equals(getResources().getDrawable(R.drawable.add_to_fav_normal).getConstantState())
任何帮助/提示或解释,将不胜感激!
我试图做一些if语句,这部作品在机器人的每个版本(16或更高,因为getDrawable的),除了安卓L(在最新的测试)。 代码如下:
if (item.getIcon().getConstantState().equals(getResources().getDrawable(R.drawable.add_to_fav_normal).getConstantState())
任何帮助/提示或解释,将不胜感激!
使用item.getContext().getDrawable(int)
或等效ContextCompat
方法。
在API 21开始,所有的框架部件是负载可绘制使用Context.getDrawable()
其在充气过程中应用上下文的当前主题。 这基本上只是调用getResources().getDrawable(..., getTheme())
内部,所以你也可以使用context.getResources().getDrawable(..., context.getTheme())
if (item.getIcon().getConstantState().equals(item.getContext()
.getDrawable(R.drawable.add_to_fav_normal).getConstantState())
在一般情况下,虽然,你不应该依赖于这个检查。 周围有什么恒定的状态,你会从一个特定的绘制收到任何API保证。
该解决方案是方便只测试:
public static void assertEqualDrawables(Drawable drawableA, Drawable drawableB) {
Bitmap bitmap1 = ((BitmapDrawable) drawableA).getBitmap();
Bitmap bitmap2 = ((BitmapDrawable) drawableB).getBitmap();
ByteBuffer buffer1 = ByteBuffer.allocate(bitmap1.getHeight() * bitmap1.getRowBytes());
bitmap1.copyPixelsToBuffer(buffer1);
ByteBuffer buffer2 = ByteBuffer.allocate(bitmap2.getHeight() * bitmap2.getRowBytes());
bitmap2.copyPixelsToBuffer(buffer2);
Assert.assertTrue(Arrays.equals(buffer1.array(), buffer2.array()));
}
根据@ alanv的回答,下面是我做的,是成功的:
if (imgClicked.getDrawable().getConstantState()
.equals(ContextCompat.getDrawable(this,
R.drawable.add_profile).getConstantState())) {
//Both images are same
}else{
//Both images are NOT same
}
感谢的@alanv :)