2017-07-10 3 views
0

私は資産フォルダの下に8種類の植物種の画像を持っています。データベースのassetsディレクトリに8つの画像資産ファイル名(パスに対応する、Eg foxtail.png、orchid.png)をキャッシュしました。 (その他の情報)アセットフォルダから特定の画像リソースを取得するにはどうすればよいですか?

私は8つの植物をRecyclerViewに表示しています。プラントのいずれかをクリックすると詳細アクティビティが開きます。 (アセットフォルダに保存されたイメージファイル名を渡す)

詳細アクティビティに渡されたファイル名と一致するアセットフォルダ内の特定のイメージファイルを選択してImageViewに設定するにはどうすればよいですか? ?

答えて

1

から対応する画像を取得するためにimage_idはを使用することができますすることはでき:ストリームとして

ファイルを開く

InputStream imageStream = null; 
try { 
    // get input stream 
    imageStream = getAssets().open("foxtail.png"); 
    // load image as Drawable 
    Drawable drawable= Drawable.createFromStream(imageStream, null); 
    // set image to ImageView 
    image.setImageDrawable(drawable); 
    } 
catch(IOException ex) { 
    return; 
} 

最後に、あなたがイメージをロードすることができます

if(imageStream !=null){ 
    imageStream.close(); 
} 

または

は、RES /描画可能なフォルダに画像を移動すると電子の流れ:

String yourImageName = getImageNameFromDB(); 
int resId= getResources().getIdentifier(yourImageName, "drawable", "com.example.yourpackegename."); 
ImageView image = (ImageView)findViewById(R.id.image); 
image.setImageDrawable(resId); 

または

このようななものと(常に画像をres/drawableに):

private enum Plant { 
    foxtail, orchid, xyz; 
} 

String value = getPlantFromDB(); 
Plant plant = Plant.valueOf(value); // surround with try/catch 

switch(plant) { 
    case foxtail : 
     resId= R.drawable.foxtail 
     break; 
    case orchid : 
     resId= R.drawable.orchid 
     break; 
    default : 
     resId= R.drawable.xyz 
     break; 
Drawable drawable = getResources().getDrawable(resId); 
ImageView image = (ImageView)findViewById(R.id.image); 
image.setImageDrawable(drawable); 
+0

ありがとうございます!!! –

0

Resource Drawable Idなどを使用して各ImageView/Viewにタグを設定します。 R.drawable.foxtail

たとえば、いずれかが選択されているimageView.setTag(R.drawable.foxtail) OR view.setTag(R.drawable.foxtail)

、タグを取得し、次のアクティビティに送信:

その後、再び例えばをご確認ください。

imageTag = getIntent().getIntExtra("chosenPlant"); 

if (imageTag == R.drawable.foxtail){ 
    //Perform action if this pic was selected (foxtail.png) 
    newImageView.setImageResource(R.drawable.foxtail); 
} else ... 
+0

画像はアンドロイドリソースフォルダにありません、それは資産/ディレクトリに保存され、私はあなたがそれを描画可能なフォルダに移動でしたR.drawable.foxtail –

+0

ようにそれを参照することはできませんか?これは、プロセスをより簡単にする –

0

リソースIDを含むintの配列を作成できます。

int images[]={ 
     R.drawable.image_1, 
     R.drawable.image_2, 
     R.drawable.image_3, 
     R.drawable.image_4, 
     R.drawable.image_5, 
     R.drawable.image_6, 
     R.drawable.image_7, 
     R.drawable.image_8 
}; 

データベースストアのイメージIDは、リソース配列内のイメージ位置に対応します。あなたは、データベースから行をフェッチするとき

| id | image_id | information | 
------------------------------- 
| 0 | 2  | info_0 | 
| 1 | 0  | info_1 | 
| 2 | 4  | info_2 | 

だから、あなたは、配列

ImageView imageView = (ImageView)v.findViewById(R.id.imageView); 
imageView.setImageResource(images[image_id]); 
+0

ありがとう、これは、画像がドロウアブルフォルダにあってもすべての画像がassets /ディレクトリに保存されている場合に可能です。どのように私はそれらを参照/参照し、それを表示するのですか? –

+0

あなたはIDが永遠に同じであることを保証することはできません –

関連する問題