如何将资产文件夹中的图像设置为列表视图?(使用 SimpleAdapter)

Posted

技术标签:

【中文标题】如何将资产文件夹中的图像设置为列表视图?(使用 SimpleAdapter)【英文标题】:How to set images from assets folder to list view?(using SimpleAdapter) 【发布时间】:2019-01-28 17:41:11 【问题描述】:

我在名为 images1 的资产中有一个文件夹,其中包含 114 张图片。我需要用 2 个 textViews 和 1 个 imageView 在 listView 中设置它们。我对 textViews 没有问题,但我不知道如何将图片从资产设置为 listView。 我试过了:

int ids[] = new int[114];

for (int i = 0; i <ids.length; i++) //<-------- taking ids of all pictures from images1 in assets-folder
        try 
            String[] images =getAssets().list("images1");
            ArrayList<String> listImages = new ArrayList<String>(Arrays.asList(images));
            int imgId = getResourceId(this, listImages.get(i),"images1", getPackageName());
            ids[i] = imgId;
        
        catch(IOException ex) 
    

ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(
            questionTexts.length);//<--------filling listView's textViews and imageView
    Map<String, Object> m;
    for (int i = 0; i < questionTexts.length; i++) 
        m = new HashMap<String, Object>();
        m.put(ATTRIBUTE_QUESTION_TEXT, questionTexts[i]);//<-------- textView
        m.put(ATTRIBUTE_ANSWER_TEXT, answerTexts[i]);//<-------- textView
        m.put(ATTRIBUTE_NAME_IMAGE, ids[i]);//<-------- imageView
        data.add(m);
        String[] from =  ATTRIBUTE_QUESTION_TEXT, ATTRIBUTE_ANSWER_TEXT,
                ATTRIBUTE_NAME_IMAGE ;
        int[] to =  R.id.listView_item_title, R.id.listView_item_short_description, R.id.listView_image ;
        SimpleAdapter sAdapter = new SimpleAdapter(this, data, R.layout.item,
                from, to);
        lvSimple = (ListView) findViewById(R.id.lvSimple);
        lvSimple.setAdapter(sAdapter);
    

public static int getResourceId(Context context,String variableName, String resourceName,
                                String packageName) throws RuntimeException//<----- this method helps me to get IDs of images from assets/images1
    try
        return context.getResources().getIdentifier(variableName,resourceName,packageName);
    catch (Exception e)
        throw new RuntimeException("Error getting resource id");
    

但最后我得到了白色的田野,而不是我的照片。 我知道当你的图片在 R.drawable 中时如何解决这个问题,但是当它们在 assets 子文件夹中时如何解决?

【问题讨论】:

How to Set Background Image from asset folder in android?的可能重复 【参考方案1】:

你可以用这个。

try 

    // get input stream
    InputStream ims = getAssets().open("avatar.jpg");
    // load image as Drawable
    Drawable d = Drawable.createFromStream(ims, null);
    // set image to ImageView
    mImage.setImageDrawable(d);
  ims .close();

catch(IOException ex) 

    return;

【讨论】:

【参考方案2】:

您确定这些图片应该在assets/ 文件夹中吗?为什么不在res/drawables/

当然你可以从资产中加载它;)

要获取资产文件夹中所有文件的列表,请使用以下代码:

list = getAssets().list("images1")

要从资产加载图像,您可以使用以下代码:

fun setImageFromAsset(ImageView view, String filename)  
    try 
        InputStream is = getAssets().open(filename);
        Drawable drawable = Drawable.createFromStream(is, null);
        view.setImageDrawable(drawable);
    
    catch(IOException ex) 
        return;
    

【讨论】:

我在问我的问题之前尝试过这个......你的答案有错误。没有适配器,您无法将图像设置为 ListView【参考方案3】:

您可以使用以下代码获取位图

private Bitmap getBitmapFromAssets(String fileName)

    AssetManager am = getAssets();
    InputStream is = null;
    try
        is = am.open(fileName);
    catch(IOException e)
        e.printStackTrace();
    
    Bitmap bitmap = BitmapFactory.decodeStream(is);
    return bitmap;

您可以使用 "Glide" 在 imageview 中显示位图 这是示例代码

Glide.with(context)
    .load(Uri.parse("file:///android_asset/fileName"))
    .into(imageView);

【讨论】:

但在我的情况下如何使用位图?【参考方案4】:

Simple Adapter 只能与 drawable-folder 中的 ID 或 Uri 一起使用。但是您可以使用 ViewBinder 使用 setImageBitmap 方法设置图像。

【讨论】:

以上是关于如何将资产文件夹中的图像设置为列表视图?(使用 SimpleAdapter)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用swift在Xcode中设置背景图像?

如何从资产中获取不同的图像并将其分配给不同表格视图单元格中的图像视图

如何在 IOS 项目中本地化图像文件

如何将图像从颤动的资产上传到firebase存储?

如何将 PSD 文件中的所有图层导出为 PDF 矢量以在 Xcode 6 中使用资产目录

如何在可展开的列表视图中设置不同的组指示器图像?