如何从资产文件夹初始化位图列表。我在资产中有一个名为“图片”的文件夹,其中包含多个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 = ???
}
答案 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
中获得文件名列表。
context.getAssets()
将返回AssetManager
对象。AssetManager.list(subPath)
将返回 subPath
中的所有文件。map()
将文件名String列表转换为Bitmap列表。AssetManager.open(filePath)
从文件中打开InputStream
。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()
}
}