Как получить список <Bitmap>из папки активов в Kotlin - PullRequest
0 голосов
/ 27 января 2019

Как создать список растровых изображений из папки ресурсов.У меня есть папка в ресурсах под названием «images» с несколькими изображениями 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 голосов
/ 29 января 2019

Я реализовал это следующим образом:

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()
    }
}
0 голосов
/ 28 января 2019

Я сейчас не в Android Environment, поэтому приведенный ниже код может не работать.

Пожалуйста, оставьте комментарий, если так.

Вам нужно иметь 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() вернет AssetManagerobject.
  2. AssetManager.list(subPath) вернет все файлы в subPath.
  3. , используйте map() для преобразования списка имен файлов String в список растровых изображений.
  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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...