Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ImageView动态查看活动内部的setBackround_Java_Android_Android Layout_Android Imageview - Fatal编程技术网

Java ImageView动态查看活动内部的setBackround

Java ImageView动态查看活动内部的setBackround,java,android,android-layout,android-imageview,Java,Android,Android Layout,Android Imageview,在我的Drawable文件夹中,我有以下图像:一级,二级,三级 我需要根据输入的字符串设置ImageView,如下所示: levelindicatorImageView = (ImageView) findViewById(R.id.levelindicatorImageView); String tempo="R.drawable.level"+LevelReached; Drawable replacer = getResources().getDrawable(t

在我的Drawable文件夹中,我有以下图像:一级,二级,三级

我需要根据输入的字符串设置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();
LevelIndicationMageView=(图像视图)findViewById(R.id.LevelIndicationMageView);
String tempo=“R.drawable.level”+达到的级别;
Drawable replacer=getResources().getDrawable(节奏);
int sdk=android.os.Build.VERSION.sdk\u int;
if(sdk
现在在levelReach变量中,我有了所需的级别(一、二、三) 我需要设置图像R.drawable.leveltwo等

请问这怎么可能? 因为getDrawable不能与tempo一起工作(需要int)


谢谢你的帮助

您不能将输入字符串附加到图像名称,但您可以做的是, 根据输入字符串选择图像,如果有3个不同的图像,请尝试使用

if(input.equalsIgnoreCase("input one"))
{
   int id = R.drawable.<img one>;
}
else
{
   //so on
}

levelindicatorImageView.setBackground(getResources().getDrawable( id) );
if(input.equalsIgnoreCase(“input one”))
{
int id=R.可拉伸。;
}
其他的
{
//诸如此类
}
levelIndicationMageView.setBackground(getResources().getDrawable(id));

您需要将级别与资源相关联,在本例中为
int
。这样做的惯用方法是将级别存储为枚举,例如

enum级别{1,2,3}
以这种方式使用枚举允许您在级别约定方面具有一定的灵活性。例如,如果您以后想添加级别
三分之二
,没有任何东西可以阻止您。然后,将每个级别与
EnumMap
中的资源关联,例如:

Map-levelResources=new-EnumMap(Level.class);
levelResources.put(一个,R.drawable.levelOne);
levelResources.put(两个,R.drawable.levelTwo);
levelResources.put(三,R.drawable.levelThree);
现在,不需要传递描述当前级别的字符串,而可以传递枚举,可以使用枚举确定正确的资源,而无需连接字符串。因此,假设
levelreach
的类型为
Level
,您可以编写:

Integer tempo=levelResources.get(达到level);
Drawable replacer=getResources().getDrawable(节奏);
您有两个选项:

选项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);
其中,级别_ONE==1;二级=2;作为常量或枚举

选项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();

不需要。您需要执行以下操作:

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));

你好,谢谢你的帮助,很抱歉反应太晚,这是一个周末,我不得不离开。setBackground无法获取int,因此LevelIndicationMageView。setBackground(imageRes)不工作。有什么想法吗?嗨,詹姆斯。一级是定义为枚举的常量-您需要定义它。但是你可以简单地与int-(1,2,3…)进行比较。关于第一个问题-请使用setBackgroundResource-更新了答案中的代码。使用开关和常量完成了。希望这是一个很好的实现方法:D非常感谢!和true LevelIndicationMageView.invalidate();不需要:)你好,一二三正在给我表达期待。有什么想法吗?谢谢是的,尝试删除
枚举级别{…}末尾的分号语句。我将更新答案以反映这一点。