gpt4 book ai didi

android - 如何检查 View 是否设置了特定背景

转载 作者:行者123 更新时间:2023-11-29 00:32:52 25 4
gpt4 key购买 nike

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

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))

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

这将解决不兼容的操作数类型 Drawable.Constant State 和 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 而不是直接比较 drawable。你也可以将背景的TAG设置为drawable的id,然后按照下面的描述进行比较,

Object tag = bgView.getTag(); 
int backgroundId = R.drawable.bg_image;
if( tag != null && ((Integer)tag).intValue() == backgroundId) {
//do your work.
}

关于android - 如何检查 View 是否设置了特定背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14352806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com