我想使用position(例如从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
有一个简单的字符串解决方案:
Most efficient method to use position to open a .java
但是对于像这样的情况呢?
答案 0 :(得分:1)
您可以将所有资源ID保存在数组中。然后使用position作为数组索引来检索相应的图像资源id并加载图像。
int resIDs[] = { R.drawwable.1, ...... };
然后
sprites.add(createSprite(resIDs[position]);
答案 1 :(得分:1)
@ abhinav8的建议的缺点,顺便说一句,这绝对不是一个糟糕的建议,就是你不能免费获得不同大小/密度桶的动态加载。或者,您可以声明一个包含资源ID的数组并迭代它。
作为最后的手段,我还想指出Resources
类提供的方法:
getIdentifier(String name, String defType, String defPackage)
这允许您按名称动态查找资源标识符,这意味着您可以使用类似于链接的Q& A中建议的方式使用它。
但是,有一个问题,在方法的文档中作为注释添加。它说:
使用此功能气馁。按标识符检索资源比按名称检索资源要高效得多。
这基本上意味着:除非你真的需要,否则不要使用它,即使这样,也几乎不能使用它。我想我应该指出完整性的方法。
答案 2 :(得分: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