如何检查视图是否设置了特定背景

2024-02-07

我正在尝试将视图背景与可绘制对象进行比较,但它对我不起作用。

View v1 = options.findViewById(i);
v1.findViewById(R.drawable.back);
Drawable d = v1.getBackground();       

if(d.getConstantState() == getResources().getDrawable(R.drawable.correct_ans_back)){
    v1.setBackgroundResource(R.drawable.a);             
}else{
    view.setBackgroundResource(R.drawable.b);               
}

如何检查我在这里收到错误。

incompatible operand types Drawable.Constant State and Drawable

1)更换

if(d.getConstantState() == getResources().getDrawable(R.drawable.correct_ans_back))

with

if(d.getConstantState() == getResources().getDrawable(R.drawable.correct_ans_back).getConstantState())

这将解决incompatible operand types Drawable.Constant State and Drawable error.

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) OR ,您可以分配两个不同的TAG与背景图像进行比较TAG只是而不是直接比较drawable。 您还可以设置背景TAG作为drawable的id并按如下所述进行比较,

Object tag = bgView.getTag(); 
int backgroundId = R.drawable.bg_image;
if( tag != null && ((Integer)tag).intValue() == backgroundId) {
   //do your work.
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查视图是否设置了特定背景 的相关文章

随机推荐