在我的drawabale文件夹中,有以下图像:levelone,leveltwo,level 3。

我需要根据输入的字符串设置ImageView,如下所示:

    levelindicatorImageView = (ImageView) findViewById(R.id.levelindicatorImageView);

    String tempo="R.drawable.level"+LevelReached;
    Drawable replacer = getResources().getDrawable(tempo);
    int sdk = android.os.Build.VERSION.SDK_INT;
    if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
        levelindicatorImageView.setBackgroundDrawable(replacer);
    } else {
        levelindicatorImageView.setBackground(replacer);
    }
    levelindicatorImageView.invalidate();


现在在LevelReached变量中,我具有所需的级别(一个,两个,三个)
我需要设置图像R.drawable.leveltwo等...

请问那怎么可能?
因为getDrawable不适用于速度(需要int)

谢谢您的帮助!

最佳答案

您有2个选择:

选项1:

只需使用开关盒即可获得正确的可绘制对象,然后像平常一样将其设置为背景图像

// Get the level drawable resource id
int imageRes = R.drawable.default_image;
switch (levelReached) {
    case LEVEL_ONE: // 1
        imageRes = R.drawable.level_one;
        break;
    case LEVEL_TWO: // 2
        imageRes = R.drawable.level_two;
        break;
    ...
}

// Set the drawable as a background
levelIndicatorImageView.setBackgroundResource(imageRes);


其中LEVEL_ONE == 1; LEVEL_TWO == 2;作为const或enum。

选项2:

您可以按名称查找可绘制资源(根据需要),但是不建议使用它,因为它更容易出错。但是,如果必须,请使用以下示例:

// Get the level drawable resource id
int imageRes = getResources().getIdentifier("level"+levelReached, "drawable", getPackageName());

// Set the drawable as a background
levelIndicatorImageView.setBackgroundResource(imageRes);


注意:

如果您设置了背景,则无需显式地使视图无效,因为设置新的背景将自身触发无效。因此,此行:

levelindicatorImageView.invalidate();


不需要。

10-02 05:41