web-dev-qa-db-ja.com

文字列からimageViewの画像を設定する方法は?

Res/drawable-mdpiディレクトリにエントリといくつかのビットマップファイルのリストがあります。パス文字列を生成し、ビットマップファクトリを使用して、リストから選択した文字列値に対応する画像をロードしようとしています。問題は、デフォルトの画像であってもビットマップが常にnullであるため、パスが正しいとは思わないことです。

String name = entries.get(position);
            String img = "res/drawable/logo_" + name.toLowerCase() + ".png"; // create the file name
            icon.setScaleType(ImageView.ScaleType.CENTER_CROP);

            // check to see if the file exists
            File file = new File(img);
            if (file.exists()){

                bm = BitmapFactory.decodeFile(img);
            }
            else{// use the default icon
                bm = BitmapFactory.decodeFile("logo_default.png");
            }

            // set the image and text
            icon.setImageBitmap(bm);

Resディレクトリはデバイスにコピーされますか?使用すべき正しいパスは何ですか、またはこれについて別の方法で実行する必要がありますか?

ありがとう

31
Matt

描画可能なフォルダに画像がある場合、これについて間違った方法で行っています。

このようなものを試してください

Resources res = getResources();
String mDrawableName = "logo_default";
int resID = res.getIdentifier(mDrawableName , "drawable", getPackageName());
Drawable drawable = res.getDrawable(resID );
icon.setImageDrawable(drawable );
50
longhairedsi

リソースIDを直接使用するgetDrawable()を使用する必要はありません

String mDrawableName = "myimageName"; int resID = res.getIdentifier(mDrawableName , "drawable", getPackageName()); imgView.setImageResource(resID);

18
Jibran

次のように画像を描画可能にするための共通関数を作成できます。

public static Drawable getDrawable(Context mContext, String name) {
        int resourceId = mContext.getResources().getIdentifier(name, "drawable", mContext.getPackageName());
        return mContext.getResources().getDrawable(resourceId);
    }
0
Vishal Bhadani
ImageView img = (ImageView) findViewById(R.id.{ImageView id});
img.setImageResource(getResources().getIdentifier("ImageName","drawable",getPackageName()));
0