【问题标题】:Android (min 2.1): load images from name stringAndroid(最低 2.1):从名称字符串加载图像
【发布时间】:2012-03-23 11:05:12
【问题描述】:

我希望能够从 res/drawable 动态加载图像。我不知道会有多少文件,但我知道它们将按照约定命名为“image_N”,其中 N 是顺序整数。应用程序运行时可能会上传新图像。

我的代码基本上是

Resources rs = getResources();
String imgName = "android.resource://" + this.getPackageName() + "/drawable/image_" + i;
int imgID = rs.getIdentifier(imgName , null, getPackageName());

if (imgID != 0)
{
    Drawable d = rs.getDrawable(imgID);
    //etc.
}

imgID 被返回总是0

我也尝试了另一种方法

String imgName = "android.resource://" + this.getPackageName() + "/drawable/image_" + i;
b = BitmapFactory.decodeFile(imgName);
if (b != null)
//etc

b 始终是null

我知道文件夹中有名称正确的文件,因为我放了一些文件。不知道我做错了什么。任何帮助将不胜感激!

【问题讨论】:

    标签: android


    【解决方案1】:

    我认为您错误地将资源编译为文件夹中的文件。据我所知,在 Android 中,资源是静态的。编译后,您无法通过将文件放入“drawable”文件夹中来添加新资源,新文件将没有 ID。 您应该使用 DATA 中的文件夹,或者最好使用 getFilesDir() 或类似的方法询问 Android API。

    欲了解更多信息,请查看>>here

    【讨论】:

    • 啊!谢谢你。如果这是真的,它让我的事情变得更容易和更困难。 :) 我放在 res/drawable 中的默认图像应该能够直接引用(也许通过 foreach 语句?)而其他图像我需要通过文件资源 - 或者可能通过 URL API 加载.
    • 对于 R.drawable 中的默认图像列表,我找到了解决方案的一部分(这里)[stackoverflow.com/a/3950277/1181368].
    【解决方案2】:

    我用这个:

    String drawableName = "drawableNameAsDeclaredInDrawableDir" // in your case "image_" + i;
    int drawableResId = resources.getIdentifier(packageName + ":drawable/" + drawableName, null, null);
    

    然后使用

    Drawable d = resources.getDrawable(drawableResId);
    

    【讨论】:

    • 顺便说一句,正如 ruhalde 指出的那样,您不能在运行时添加可绘制资源。您必须在 sd 卡或内存中加载新图像。
    • 嗨 YuviDroid - 谢谢!但是您的代码与我的代码基本相同,不是吗?除了看起来你遗漏了"android:resource//"
    【解决方案3】:

    我相信您错误地使用了getIdentifier(...)。这应该有效:

    int id = Context.getResources().getIdentifier("image_" + i, "drawable", getPackageName());
    

    这相当于 id R.drawable.image_<+i>

    【讨论】:

    • 我的最终代码确实有一行看起来像这样。 :) 谢谢!
    【解决方案4】:

    在适配器中我使用这个

       Context context;
       public MyAdapter0(Context context, 
       List<String>   moduleList,List<String> moduleList2) {
       mInflater = LayoutInflater.from(context);
       for (int i=0;i<moduleList.size();i++) {
       int id = context.getResources().getIdentifier("color6_"+i,
       "drawable", context.getPackageName());
        mItems.add(new Item(moduleList.get(i),moduleList2.get(i),id));
       // Log.d("idimage", String.valueOf(R.drawable.color6));
        }
    

    【讨论】:

      猜你喜欢
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 2012-11-05
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多