适用于可绘制资源的Android动态变量

时间:2015-10-12 03:21:35

标签: android opengl-es bitmap

您好我的编码问题,我该怎么做:

BitmapFactory.decodeResource(getResources(), R.drawable."some string");

我正在使用:

getResources().getIdentifier(img, "drawable", context.getPackageName())

然后它显示:

  

错误无法解析方法decodeResource(int)

2 个答案:

答案 0 :(得分:2)

从技术上讲,你不能那样做,因为“R.drawable.XXXXX”是一个在编译时生成的int。我建议创建一个自定义枚举,它将int与字符串相关联,并提供一个返回给定另一个的方法。例如:

public enum DrawableEnum {
    STRING_ONE("some string", R.drawable.some_string),
    STRING_TWO("another string", R.drawable.some_other_string),
    STRING_THREE("third string", R.drawable.string_three);

    private final String string;
    private final int resId;

    DrawableEnum(String string, int resId) {
        this.string = string;
        this.resId = resId;
    }

    int getResId() {
        return resId;
    }

    String getString() {
        return string;
    }

    int getResIdFromString(String string) {
        for(DrawableEnum item : DrawableEnum.values()) {
            if(item.getString().equals(string)) {
                return item.getResId();
            }
        }
        return -1;
    }
}

然后这样称呼:

int resId = DrawableEnum.getResIdFromString("some string");
BitmapFactory.decodeResource(getResources(), resId);

答案 1 :(得分:0)

您将能够使用以下代码获取资源ID:

int resId = getResources().getIdentifier("some_string", "drawable", getPackageName());
BitmapFactory.decodeResource(getResources(), resId);