【Android】【Java】リソース名で、res/drawable-~ フォルダから、画像を読み込む(Drawable) 
2014/07/14 Mon [edit]
もうひとつ、Android 特有の Drawable オブジェクトでも、「res/raw フォルダから、テキストファイルを読み込む」と同じように、リソース名を引数にした画像読み込み関数を書いておく。
//リソース名で、res/drawable-~ フォルダから、画像を読み込む(Drawable) (Android 用)
public static final Drawable loadDrawableResource(String resName, Context context) throws IOException, FileNotFoundException {
final int id = context.getResources().getIdentifier(resName, "drawable", context.getPackageName());
if (id == 0) { //エラーにはならない
throw new FileNotFoundException("Not Found - " + resName);
}
return context.getResources().getDrawable(id);
}
//メインでは... (※例外処理は省略)
String resName = "sample"; //"res/drawable-nodpi/sample.jpg" 等
Drawable drawable = loadDrawableResource(resName, this); //this は起動した Activity が良い(Context)
例外処理は手抜きしてるので、必要に応じて適当に。
リソースIDで画像読み込みを行うならば、return 文の1行だけでも良い。
Drawable drawable = getContext().getResources().getDrawable(R.drawable.sample);
ただ、ファイル読み込みでは通常、String 型のファイル名等がほとんどなので、int 型のリソースID形式でコードを大量に書いてしまうと汎用性の面では劣る。例えば、リソースIDが割り振られない場所(assets フォルダ等)に移動したときなどは、コードの大幅修正が必要になる。後々の使い回しも考えてコーディングするなら、String 型のリソース名で書いておいた方が、修正も楽だろう。ファイル名やリソース名は設定ファイル等に書いておき、メインコードを interface などを噛ませて置けば、ほとんど修正しなくて良いという利点がある。そういうときに利用すると良い。
ちなみに、「drawable-nodpi」というフォルダを作って、画像を入れておくと、Drawable オブジェクト特有の端末の解像度による自動リサイズがされなくなり、元の画像サイズでロードされる。
実のところ、私はコードの互換性を考えて、ほとんど Drawable オブジェクトは使わない。しかし、画像の拡大・縮小が手軽にできるので、そのためだけに一時的に利用する事がある。そういうときも interface を噛ませておいて、必要に応じて、別仕様の入れ替えができるように作って置くと良いだろう。なるべくプラットフォーム特有仕様は、避ける工夫をしておいた方が、長い目で見れば有益な事が多い。
(関連記事)
【Android】リソース名で、res/drawable-~ フォルダから、画像を読み込む(Bitmap)
【Android】res/raw リソースフォルダからテキストファイルを読み込む
【Android】画像リソースIDをコードで取得する
【Android】アプリ名 app_name タグをコードで取得する
【Android】assets フォルダから画像ファイルを読み込む
【Android】SDカードから画像ファイルを読み込む
【Android】内部ストレージから画像ファイルを読み込む
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ
- 関連記事
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/139-7454bd80
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |