如何从Kotlin的资产文件夹中获取List <bitmap>

时间:2019-01-27 01:49:23

标签: arraylist kotlin bitmap

如何从资产文件夹初始化位图列表。我在资产中有一个名为“图片”的文件夹,其中包含多个PNG图片:

E:\ Computer Projects \ Android \ TaskProgress \ app \ src \ main \ assets \ images

我的代码:

class Icons(val context: Context)
{
    companion object
    {
        lateinit var iconList : MutableList<Bitmap>
    }

    init
    {
        iconList = ???
    }

2 个答案:

答案 0 :(得分:0)

我目前不在Android环境中,因此以下代码可能无法正常工作。

请这样发表评论。

您需要拥有Context才能使用资产。

因此,与其使用声明初始化iconList

我将添加load()方法来加载资产列表。

图标类别

如果添加load()方法,则图标类如下所示。

class Icons {
    companion object {
        // initialize with empty list
        var iconList = listOf<Bitmap>()

        fun load(context: Context) {
            // This is where we will load assets
        }
    }
}

load()方法

首先使用load()方法,我们将在 assets/list 中获得文件名列表。

  1. context.getAssets()将返回AssetManager对象。
  2. AssetManager.list(subPath)将返回 subPath 中的所有文件。
  3. 使用map()将文件名String列表转换为Bitmap列表。
  4. AssetManager.open(filePath)从文件中打开InputStream
  5. BitmapFactory.decodeStream(stream)Bitmap创建InputStream

有了这些,它将成为

val am = context.getAssets()
iconList = am.list("images").map { 
    val inputStream = am.open("images/$it")
    return BitmapFactory.decodeStream(inputStream)
}

答案 1 :(得分:0)

我是通过以下方式实现的:

class Icons(var context: Context)
{
    init
    {
        val assetManager = context.assets
        try
        {
            var `is`: InputStream
            var files = assetManager.list("boys")
            for(i in files!!.indices)
            {
                `is` = assetManager.open("boys/" + files[i])
                val bitmap = BitmapFactory.decodeStream(`is`)
                iconListBoys.add(i, bitmap)
            }
            files = assetManager.list("girls")
            for(i in files!!.indices)
            {
                `is` = assetManager.open("girls/" + files[i])
                val bitmap = BitmapFactory.decodeStream(`is`)
                iconListGirls.add(i, bitmap)
            }
        }
        catch (e: IOException)
        {
            e.printStackTrace()
        }
    }

    companion object
    {
        var iconListBoys: ArrayList<Bitmap> = ArrayList()
        var iconListGirls: ArrayList<Bitmap> = ArrayList()
    }
}