2012-01-14 10 views
1

ファイルの場所を渡して画像を読み込もうとしています。私はResource.Idによって、リソース/描画可能ディレクトリから画像を取得できることを知っています。しかし、私は少し絵を静かにするので、大きなswitch-statement(そして正しいものを得る)よりも、絵を名前で読んでみたいと思います。アンドロイド用のモノラルリソースから画像を読み込むためのパスを決定する

以下のコードでは、Drawableディレクトリからlogo.pngファイルを読み込もうとしています。私はこれが私が絵を置いておくべき正しいディレクトリかどうか、あるいは別のディレクトリに置くべきかどうか分からない(資産??)。

私はコードが正しいと思うし、私の問題はファイルのパスです。私は、ファイルパスの形式がどのようなものか理解できません。私はその後

(「AndroidAsset」のビルドアクションで)資産フォルダ内の画像を置くこととしていたよう

var imageView = FindViewById<ImageView>(Resource.Id.test_image); 
var file = new Java.IO.File("Resources/Drawable/logo.png"); 
var drawableLogo = Android.Graphics.Drawables.Drawable.CreateFromPath(file.AbsolutePath); 
imageView.SetImageDrawable(drawableLogo); 

自分の質問に答えるために...

が見えます

var imageView = FindViewById<ImageView>(Resource.Id.test_image); 
var inputStream = Assets.Open("logo.png"); 
var bMap = BitmapFactory.DecodeStream(inputStream); 
imageView.SetImageBitmap(bMap); 

答えて

3

1つのオプションは、その名前によってリソースを検索することです:

int id = Resources.GetIdentifier("drawable/icon", null, PackageName); 
imageView.SetImageResource(id); 

これはしかし、本当に素晴らしい解決策ではありません。 1つは、識別子で直接リソースにアクセスするよりも遅くなります。また、リソース名のJavaバージョンを使用する必要があります(たとえば、アイコンはアイコンに変換されます)。一般的に私はこれを行うことをお勧めしません。

より良いオプションは、すべての画像を資産として保持し、BuildActionをAndroidAssetに設定することです。そうすれば、次のようなことができます。

var drawable = Drawable.CreateFromStream(Assets.Open("Icon.png", Access.Streaming), null); 
imageView.SetImageDrawable(drawable); 
1

あなたはおそらく、Context.Resourcesプロパティを使用する場合は、あなたと仮定すると:それを読んで、私はちょうどオフ資産のOpenメソッドを使用しますアクティビティなどで再入力してください:

var logo = Resources.GetDrawable (Resource.Drawable.Logo) 

この方法では、画像が実際にどこに保存されるか心配する必要はありません。

+0

ファイルの名前でアクセスしようとしています。選択可能な写真がたくさんあるので、switch文を実行して、正しいDrawable変数でGetDrawable()を呼び出す必要があります。 –

関連する問題