如何从资产文件夹获取特定图像资源?

时间:2017-07-10 18:44:41

标签: java android imageview resources assets

我在资源文件夹下有8个不同的植物种类图像,我在数据库的资源目录中缓存了8个图像资源文件名(对应于路径,E.g foxtail.png,orchid.png)。 (加上其他信息)

我'在RecyclerView中显示8个植物。单击任何工厂将打开详细活动。 (传递保存在资产文件夹E.g foxtail.png中的图像文件名)

如何选择assets文件夹中与传递给Detail Activity的文件名匹配的特定图像文件并将其设置为ImageView?

3 个答案:

答案 0 :(得分:3)

你可以:

以流形式打开文件

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 / drawable文件夹中移动图像,您可以使用以下方式加载图像:

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);

答案 1 :(得分:0)

使用Resource Drawable Id在每个ImageView / View上设置标签,例如。 R.drawable.foxtail

例如。 imageView.setTag(R.drawable.foxtail)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 ...

答案 2 :(得分: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    |

因此,当您从数据库中获取行时,可以使用image_id从数组中检索相应的图像

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