1

私は10個の画像ビューを持っています:

ImageView Card0=(ImageView)findViewById(R.id.Card0);
.....
ImageView Card9=(ImageView)findViewById(R.id.Card9);

すべての画像はドローアブル フォルダーにありますが、リモート データベースからカードを選択しています。PHP スクリプトは 10 枚のランダムなカードを生成します。

ファイル名を含む配列があります:

Cards = deal.split(":");

今、私は画像を設定したい:

Card0.setImageResource(R.drawable.Cards[0]);

私はたくさん試して検索しましたが、変数を設定できませんでしたsetImageResource(R.drawable.*Variable*);

誰か助けてください。

4

1 に答える 1

2

R.id.drawable.* を使用して動的にロードすることはできません。

解決策 1:

あなたのカード画像の名前は次のとおりであると仮定します: card0.png, card1.png ... card9.png assets(ディレクトリ内にres) ディレクトリを作成することをお勧めします。assetsカード イメージをディレクトリにコピーします。

import android.app.Activity;
import android.content.res.AssetManager;
import android.graphics.drawable.Drawable;

import java.io.InputStream;
import java.io.IOException;

public class YourActivity extends Activity {

//...

    public Drawable loadAssetImage(String fileName) {
        AssetManager assetMgr = this.getAssets();

        try {
            InputStream is = assetMgr.open(fileName);
            Drawable d = Drawable.createFromStream(is, null);
            return d;
        }catch( IOException e ) {
            // error...
            return null;
        }       
    }
}

このメソッドは、ディレクトリloadAssetImage()からイメージをロードします。assetsしたがって、文字列パラメーターを受け入れるため、画像を動的にロードできるようになりました。

ディレクトリ名は でなければならないことに注意してくださいassets。Android では、assetsディレクトリ内の内部リソースへの直接 (生の) アクセスが許可されています。

解決策 2

public Drawable loadCardImage(int index) {
    switch( index ) {
    case 0:
        return android.R.Card0;

    case 1:
        return android.R.Card1;

    ..
    case 9:
        return android.R.Card9;         
    }
    return null;
}

サーバーからカードのインデックスを受け取ります。この関数は、適切なリソースを返します。

于 2012-08-04T17:36:19.820 に答える