1)更換
if(d.getConstantState() == getResources().getDrawable(R.drawable.correct_ans_back))
與
if(d.getConstantState() == getResources().getDrawable(R.drawable.correct_ans_back).getConstantState())
這將解決incompatible operand types Drawable.Constant State and Drawable
錯誤。
2)如果你無法比較兩個位圖,那麼你可以使用下面的方法。
public boolean compareDrawable(Drawable d1, Drawable d2){
try{
Bitmap bitmap1 = ((BitmapDrawable)d1).getBitmap();
ByteArrayOutputStream stream1 = new ByteArrayOutputStream();
bitmap1.compress(Bitmap.CompressFormat.JPEG, 100, stream1);
stream1.flush();
byte[] bitmapdata1 = stream1.toByteArray();
stream1.close();
Bitmap bitmap2 = ((BitmapDrawable)d2).getBitmap();
ByteArrayOutputStream stream2 = new ByteArrayOutputStream();
bitmap2.compress(Bitmap.CompressFormat.JPEG, 100, stream2);
stream2.flush();
byte[] bitmapdata2 = stream2.toByteArray();
stream2.close();
return bitmapdata1.equals(bitmapdata2);
}
catch (Exception e) {
// TODO: handle exception
}
return false;
}
3)或者,您可以分配兩個不同TAG
的背景圖像和比較TAG
而不是隻直接比較繪製的。 您還可以設置背景的TAG
作爲繪製的ID和如下所述進行比較,
Object tag = bgView.getTag();
int backgroundId = R.drawable.bg_image;
if(tag != null && ((Integer)tag).intValue() == backgroundId) {
//do your work.
}
你需要什麼用的? –
@deville我需要檢查視圖是否設置了背景?如果設置然後改變或者不要這樣做 – Goofy
比較兩個drawable(例如潛在的大對象,BitmapDrawables)看起來效率不高。 –