有效地使用位置来控制动作

时间:2012-06-04 04:15:58

标签: java android position

我想使用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

但是对于像这样的情况呢?

3 个答案:

答案 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