我正在尝试在if语句中执行某些操作,这适用于除Android L(最新测试)之外的每个版本的android(16或更高版本,因为getDrawable)。代码如下:
if (item.getIcon().getConstantState().equals(getResources().getDrawable(R.drawable.add_to_fav_normal).getConstantState())
任何帮助/提示或解释都将不胜感激!
答案 0 :(得分:6)
使用item.getContext().getDrawable(int)
或等效的ContextCompat
方法。
从API 21开始,所有加载drawable的框架小部件都使用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())
但一般而言,您不应该依赖此检查。对于从特定drawable中获得的常量状态,没有API保证。
答案 1 :(得分:0)
此解决方案仅适用于测试:
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()));
}
答案 2 :(得分:0)
根据@ 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:)