在我的drawabale文件夹中,我有这些图像:levelone,leveltwo,level three。
我需要根据输入的字符串设置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变量中我有所需的级别(一,二,三) 我需要设置Image R.drawable.leveltwo等......
请问怎么可能? 因为getDrawable不适用于速度(需要int)
感谢您的帮助!
答案 0 :(得分:2)
您有两个选择:
只需使用开关盒即可获得正确的可绘制,然后像往常一样将其设置为背景图像
// 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; as const或enum。
您可以按名称找到可绘制资源(如您所愿),但不建议使用它,因为它更多是错误修剪。但如果必须,请使用以下示例:
// 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();
不需要。
答案 1 :(得分:0)
您无法将输入字符串附加到图像名称,但您可以执行的操作是, 根据输入字符串选择图像然后如果您有3个不同的图像,请尝试使用;
if(input.equalsIgnoreCase("input one"))
{
int id = R.drawable.<img one>;
}
else
{
//so on
}
levelindicatorImageView.setBackground(getResources().getDrawable( id) );
答案 2 :(得分:0)
您需要将关卡与资源相关联,在本例中为int
。这样做的惯用方法是将级别存储为枚举,比如说
enum Level { ONE, TWO, THREE }
以这种方式使用枚举可以让您灵活地使用级别约定。例如,如果您以后想要添加级别TWO_THIRDS
,则没有什么可以阻止您。然后,将每个级别与EnumMap
中的资源相关联,例如:
Map<Level, Integer> levelResources = new EnumMap<Level, Integer>(Level.class);
levelResources.put(ONE, R.drawable.levelOne);
levelResources.put(TWO, R.drawable.levelTwo);
levelResources.put(THREE, R.drawable.levelThree);
现在,您可以传递枚举,而不是传递描述当前级别的字符串,您可以使用它来确定正确的资源而不连接字符串。因此,假设levelReached
的类型为Level
,您可以写:
Integer tempo = levelResources.get(levelReached);
Drawable replacer = getResources().getDrawable(tempo);
答案 3 :(得分:0)
你需要做这样的事情:
public int getResourecId(String level) {
if(level.equalsIgnoreCase("one"))
return R.drawable.levelone;
if(level.equalsIgnoreCase("two"))
return R.drawable.leveltwo;
if(level.equalsIgnoreCase("three"))
return R.drawable.levelthree;
return 0;
}
然后:
Drawable replacer = getResources().getDrawable(getResourceId(LevelReached));