0

我想使用位置(例如从gridview返回)或类似的数字整数来做各种事情,例如创建一个精灵,或者在任何需要数字以外的东西的命令中,例如我想使用类似的东西:

sprites.add(createSprite(R.drawable.image(position));

,其中 createSprite 使用提供的图像创建一个精灵,

代替:

if (position == 1) {sprites.add(createSprite(R.drawable.image1);}
if (position == 2) {sprites.add(createSprite(R.drawable.image2);}
...etc

字符串有一个简单的解决方案:

使用位置打开 .java 的最有效方法

但是对于这样的情况呢?

4

3 回答 3

1

您可以将所有资源 ID 保存在一个数组中。然后将该位置作为数组索引,检索对应的图片资源id并加载图片。

int resIDs[] = { R.drawwable.1, ...... };

然后

sprites.add(createSprite(resIDs[position]);
于 2012-06-04T04:39:27.433 回答
1

@abhinav8 的建议的缺点是,你不能免费从不同大小/密度的桶中获得动态加载,这绝对不是一个坏的。或者,您可以只声明一个包含资源 ID 的数组并对其进行迭代。

作为最后的手段,我还想指出Resources该类提供的一种方法:

getIdentifier(String name, String defType, String defPackage).

这允许您按名称动态查找资源标识符,这意味着您可以以类似于链接问答中建议的方式使用它。

但是,有一个问题,在方法的文档中作为注释添加。它说:

不鼓励使用此功能。按标识符检索资源比按名称检索资源效率更高。

这基本上意味着:除非你真的必须,否则不要使用它,即使那样,也很少使用它。只是想我应该指出完整性的方法。

于 2012-06-04T04:39:35.763 回答
0

一种方法是将所有图像放在assest文件夹中并用于AssestsManager检索它们。
像::

String imagePath =  "images/myimage"

InputStream is = getAssets().open( imagePath+position );        
Bitmap bmp = BitmapFactory.decodeStream(is);
sprites.add(createSprite(bmp)); ////modify your createsprite(),so that it can receive Bitmap
于 2012-06-04T04:28:00.647 回答