gpt4 book ai didi

android - 资源是颜色还是可绘制对象?

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:16 28 4
gpt4 key购买 nike

我已经创建了一个扩展 ImageView 的小自定义 View 。我的自定义 View 提供了一个方法 showError(int),我可以在其中传递一个资源 ID,它应该显示为 ImageView 内容。如果我可以传递一个简单的颜色资源 ID 或可绘制资源 ID,那就太好了。

我的问题是:如何确定传递的资源 ID 是 Drawable 还是 Color?

我目前的做法是这样的:

class MyImageView extends ImageView{

public void showError(int resId){

try{
int color = getResources().getColor(resId);
setImageDrawable(new ColorDrawable(color));
}catch(NotFoundException e){
// it was not a Color resource so it must be a drawable
setImageDrawable(getResources().getDrawable(resId));
}

}
}

这样做安全吗?我的假设是,资源 ID 确实是独一无二的。我的意思是在 R.drawable 或 R.color 中不是唯一的,但在 R

中是完全唯一的

所以没有

R.drawable.foo_drawable = 1;
R.color.foo_color = 1;

id 1 将只分配给其中一个资源而不分配给两者是否正确?

最佳答案

您可能想从资源中查找 TypedValue,以便确定该值是 Color 还是 Drawable .像这样的东西应该可以在不需要抛出和捕获异常的情况下工作:

TypedValue value = new TypedValue();
getResources().getValue(resId, value, true); // will throw if resId doesn't exist

// Check whether the returned value is a color or a reference
if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT && value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
// It's a color
setImageDrawable(new ColorDrawable(value.data));
} else if (value.type == TypedValue.TYPE_REFERENCE) {
// It's a reference, hopefully to a drawable
setImageDrawable(getResources().getDrawable(resId));
}

关于android - 资源是颜色还是可绘制对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21210825/

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