通过从外面获取图像的名称来设置不同的图像

时间:2014-07-15 10:45:17

标签: android android-resources

在我的Widget我有一个ImageView,我会从外面收到一个代码,这些代码在1-40之间,从另一边我在{{1}中有40个不同的图像我将它们命名为相关代码的文件夹。 现在我想做的是,通过从外面读取一个代码,在drawable中显示具有相同名称的图像。 例如,如果我读了代码33,我想在ImageView中显示名为33的图像。

5 个答案:

答案 0 :(得分:2)

对于一个名为" 33.png"或类似的,这样做:

int redId = getResources().getIdentifier("33", "drawable", this.getPackageName());

img.setImageResource(R.drawable.my_image);


而且,在一般情况下:

void setImageByResourceName(int resourceName) { // 33 in the example above

    String nameStr = String.valueOf(resourceName);

    int redId = getResources().getIdentifier(nameStr, "drawable", this.getPackageName());

    img.setImageResource(R.drawable.my_image);

}

答案 1 :(得分:1)

将您的图片放入资源文件夹,您就可以按名称选择图片。 假设你的文字是33,你的图像名称是33.png

AssetManager assetManager = context.getAssets();
String fileName = "33";
Bitmap b = BitmapFactory.decodeStream(assetManager.open(fileName + ".png"));
imageView.setImageBitmap(b);

答案 2 :(得分:0)

您可以使用以下方法读取其名称的Drawable资源:

private static Drawable getDrawableResourceByName(Context context, String resourceName) {
    String packageName = AmbyantApplication.get().getPackageName();
    int resId = AmbyantApplication.get().getResources().getIdentifier(resourceName, "drawable", packageName);
    if (resId != 0) {
        return context.getResources().getDrawable(resId);
    } else {
        return null;
    }
}

答案 3 :(得分:0)

如果你知道它的名字,你可以向系统询问资源ID。例如:

int resId = context.getResources().getIdentifier(
    "33", "drawable", context.getPackageName());

但是,此方法调用相对较贵,因此如果必须,请尽量少用它。来自docs"注意:不鼓励使用此功能。按标识符检索资源比按名称检索资源要高效得多。"

答案 4 :(得分:0)

您可以使用SparseArray或Hashmap将图像映射到整数,然后如果从服务器接收整数,您可以根据该键设置drawable。

您可以通过

获取与sparseArray中的密钥相关的图像
SparseArray<E> t = new SparseArray<E>();
e = t.get(key);
.
.
.