0

/res フォルダーから画像を動的に取得しようとしていますが、次の部分で混乱しています。StackOverflow を調べたところ、最初に必要だった次の例が見つかりました。

String fName = "android.resource://j.l.library11/drawable/" + itemName;

/res フォルダーにあるので、次のようになると思いました。

String fName = "android.resource://j.l.library11/drawable/res/" + itemName;

この2つのうち、どちらが正しいでしょうか?

また、/res フォルダー (itemName) からの画像で ImageView (iView) を設定できるようになるまでの次のいくつかの手順について、混乱しています。頭のてっぺんから考えられるのは、次のことだけです。

File file = new File(fName);

次に、ハッシュコードを取得します

int itemHashCode = file.HashCode() 

そしてそれを次のように使用します

iView.setImageResource(itemHashCode).  

それはうまくいくでしょうか、それとも誰かがこれに対する正しい解決策を知っていますか?

4

2 に答える 2

2

res/drawable に配置された画像は、AAPT によって R.java クラス内の整数マッピングに自動的にコンパイルされます。以下を使用して ImageView に画像を設定できます。

myImageView.setImageResource(R.drawable.nameOfYourImage);

編集:なぜあなたがやっていることをしたいのかはっきりしていませんが、イメージのハッシュコードで ImageView のリソースを設定すると、ResourceNotFoundException が発生します。

編集:データベースからのいくつかのデータとの関連付けに基づいて画像を動的に設定できるようにしようとしている場合は、 R.drawable.imagename の int を保存してドローアブルをコンパイルしたという事実を利用してくださいDB の新しい整数列。次に、のように画像を設定するだけですsetImageResource(intFromDB)。コードで DB を設定していないため、コンパイル済みの R.drawable にアクセスできない場合は、次のような代替手段があります。

Resources res = getResources();
String mDrawableName = "image_name";
int resourceId = res.getIdentifier(mDrawableName , "drawable", getPackageName());
Drawable drawable = res.getDrawable(resourceId);
icon.setImageDrawable(drawable );

またはさらに短く、これはうまくいくかもしれません:

int id = getResources().getIdentifier("mypackagename:drawable/imageName", null, null);
imageView.setImageResource(id);
于 2012-09-21T07:41:55.037 に答える
0

私は反射に行きます:

Field[] fields = R.drawable.class.getFields();
for(Field field:fields){
    try {
            imageView.setImageResource(field.getInt(null));
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}
于 2012-09-21T07:48:29.930 に答える