0

機能を使いたいbitmapfactory.decodeFile(string pathname)

しかし、それを使用すると、NULL返されます。PATHNAME に何をどのように書き込むかを、例を挙げて指定してください。

for(int j=0;j<3;j++)
{
    img_but[count].setImageBitmap(BitmapFactory.decodeFile("/LogoQuiz/res/drawable-hdpi/logo0.bmp"));
    linear[i].addView(img_but[count]);
    count++;
}

そのようなパス名の代わりに、何を使用する必要がありますか?

4

1 に答える 1

1

ファイル名を使用したい場合は、それらをドローアブル フォルダー内に配置することはできません。これを行う唯一の方法は、アセット フォルダー内に画像を配置することです。フォルダーがない場合はassets/、メイン プロジェクト内にフォルダーを作成する必要があります。gen/、、res/およびsrc/フォルダーと同じブランチにある必要があります。

アセットフォルダーには、必要なファイル構造を含めることができます。たとえば、画像をassets/images/フォルダーに入れることができます。サウンド ファイルはassets/sounds/フォルダに入れることができます。次のように画像にアクセスします。

public Bitmap getBitmap(Context ctx, String pathNameRelativeToAssetsFolder) {
  InputStream bitmapIs = null;
  Bitmap bmp = null;
  try {
    bitmapIs = ctx.getAssets().open(pathNameRelativeToAssetsFolder);
    bmp = BitmapFactory.decodeStream(bitmapIs);
  } catch (IOException e) {
    // Error reading the file
    e.printStackTrace();

    if(bmp != null) {
      bmp.recycle();
      bmp = null
    }
  } finally {
    if(bitmapIs != null) {
       bitmapIs.close();
    }
  }

  return bmp;
}

パス名は、変数名が示すように、assets/フォルダーに対して相対的である必要があります。したがって、フォルダーに画像がそのままある場合、それは単純imageName.pngです。サブフォルダーにある場合は、subfolder/imageName.png.

注: Android は、assets フォルダー内の密度フォルダーから選択しません。画像をそのままデコードします。画面密度と解像度のさらなる調整は、ユーザーが行う必要があります。

Androidのアセットフォルダーからファイルを開く

于 2013-06-27T17:50:58.753 に答える