0

位置(たとえば、グリッドビューから返される)または同様の数値整数を使用して、スプライトを作成したり、数値以外の何かを必要とするコマンドでさまざまなことをしたい。たとえば、次のようなものを使用したい:

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

文字列には簡単な解決策があります。

position を使用して .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).

これにより、リソース識別子を名前で動的に検索できます。つまり、リンクされた Q&A で提案されているのと同様の方法で使用できます。

ただし、メソッドのドキュメントに注記として追加されているキャッチがあります。それは言います:

この関数の使用はお勧めできません。名前でリソースを取得するよりも、識別子でリソースを取得する方がはるかに効率的です。

つまり、本当に必要な場合以外は使用しないでください。ただし、完全を期すために方法を指摘する必要があると思いました。

于 2012-06-04T04:39:35.763 に答える
0

これを行う 1 つの方法は、すべての画像を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 に答える