在我的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();
不需要。