英文:
How can you reference path to resources in Android Studio?
问题
你好,以下是代码部分的翻译:
// 尝试加载图片并创建动画的函数
fun loadPics(context: Context, path: String, iconList: MutableList<Bitmap>): MutableList<Bitmap> {
val assetManager = context.assets
try {
var `is`: InputStream
var files = assetManager.list(path)
for (i in files!!.indices) {
`is` = assetManager.open(path + files[i])
val bitmap = BitmapFactory.decodeStream(`is`)
iconList.add(i, bitmap)
}
} catch (e: IOException) {
e.printStackTrace()
} finally {
return iconList
}
}
请注意,代码中的 <Bitmap>
不需要翻译。
至于你的问题,你想要引用路径的方式是正确的,但在 Android Studio 中,资源路径应该以 "res/" 开头,而不是绝对路径。例如,你可以引用 drawable 资源的路径如下:
res/drawable/
这应该是正确的资源路径格式。如果你在使用 assetManager
时仍然遇到问题,可能需要检查路径是否正确,并确保资源位于指定的位置。
英文:
Hi I am trying to load series of pictures to create animation in Android Studio. I managed to spot similar thread and i got to this stage:
fun loadPics(context: Context, path: String, iconList: MutableList<Bitmap>): MutableList<Bitmap>{
val assetManager = context.assets
try
{
var `is`: InputStream
var files = assetManager.list(path)
for(i in files!!.indices) {
`is` = assetManager.open(path + files[i])
val bitmap = BitmapFactory.decodeStream(`is`)
iconList.add(i, bitmap)
}
}
catch (e: IOException)
{
e.printStackTrace()
}
finally {
return iconList
}
}
My really basic question is how do I reference path? i tried right - clicking on resource and copying path / reference but assetManager always returns nothing..
Tried copying paths by righ clicking resource files
res/drawable/
res/
absolute path C:\Users..\AndroidStudioProjects\ImageViewer\app\src\main\res\drawable\
答案1
得分: 0
以下是您要翻译的内容:
唯一可以作为InputStream打开的资源是原始资源和资产。不会对其他目录中的资源(如res/drawable
)起作用。
您可以将文件放在res/raw
目录下,然后通过context.resources.openRawResource()
使用它们的R.raw
ID作为InputStream来访问它们。原始资源的优点是它们可以根据设备和语言环境特性进行组织,就像布局和字符串资源一样,因此系统会自动选择文件的适当版本。例如,您可以有一个res/raw/myFile.txt
和res/raw-large/myFile.txt
,它将为大屏设备提供专用的文件。此外,如果将应用程序捆绑到Google Play,商店可以根据设备自定义下载,因此不会包含永远不会在特定设备上使用的原始文件。
您可以将文件放在src/main/assets
(您可能需要创建此目录),然后通过context.resources.assets.open()
作为InputStream来访问它们。资产的优点是您可以在src/main/assets
内部使用子目录进行组织。您可以使用context.resources.assets.list()
列出资产文件。
资产示例:
您在这里有一张图片:src/main/assets/picture.png
。
@Throws(IOException::class)
fun Context.loadBitmapAsset(fileNameInAssets: String): Bitmap {
val stream = assets.open(fileNameInAssets)
return BitmapFactory.decodeStream(stream)
}
如果您调用loadBitmapAsset("picture.png")
,它将加载您的picture.png
。
或者,如果您想要将res/main/assets
中的所有文件作为图像打开:
@Throws(IOException::class)
fun Context.loadAllAssetsAsBitmaps(): List<Bitmap> {
return assets.list("") // 我们在资产的根目录中使用空字符串
.map { BitmapFactory.decodeStream(assets.open(it)) }
}
原始资源示例:
您在这里有一张图片:src/main/res/raw/picture.png
@Throws(IOException::class)
fun Context.loadRawBitmap(@RawRes resId: Int): Bitmap {
val stream = resources.openRawResource(resId)
return BitmapFactory.decodeStream(stream)
}
如果您调用loadBitmapAsset(R.raw.picture)
,它将加载您的picture.png
。
或者,如果您想要将res/main/res/raw
中的所有文件作为图像打开:
@Throws(IOException::class)
fun Context.loadAllRawResourcesAsBitmaps(): List<Bitmap> {
val rawIds = R.raw::class.java.fields.map { it.int }
return rawIds.map { BitmapFactory.decodeStream(resources.openRawResource(it)) }
}
英文:
The only resources you can open as an InputStream are raw resources and assets. It won't work for resources in other directories like res/drawable
.
You can put files in res/raw
and then access them as an InputStream via context.resources.openRawResource()
using their R.raw
ID. The advantage with raw resources is that they can be organized by device and locale characteristics just like layout and string resources, so the system takes care of selecting the appropariate flavor of the file. e.g. you could have a res/raw/myFile.txt
and res/raw-large/myFile.txt
and it will give you the specialized file on large screen devices. Also, if you bundle your app for Google Play, the store can tailor the download for the device so raw files that will never be used on a specific device won't be included.
You can put files in src/main/assets
(you might have to create this directory) and access them as an InputStream via context.resources.assets.open()
. The advantage with assets is that you can organize them with subdirectories inside src/main/assets
. You can list asset files using context.resources.assets.list()
.
Assets Example:
You have an image here: src/main/assets/picture.png
.
@Throws(IOException::class)
fun Context.loadBitmapAsset(fileNameInAssets: String): Bitmap {
val stream = assets.open(fileNameInAssets)
return BitmapFactory.decodeStream(stream)
}
If you call loadBitmapAsset("picture.png")
it will load your picture.png
.
Or if you want to open all files in res/main/assets
as images:
@Throws(IOException::class)
fun Context.loadAllAssetsAsBitmaps(): List<Bitmap> {
return assets.list("") // we use empty string for the root directory in assets
.map { BitmapFactory.decodeStream(assets.open(it)) }
}
Raw resource example:
You have an image here: src/main/res/raw/picture.png
@Throws(IOException::class)
fun Context.loadRawBitmap(@RawRes resId: Int): Bitmap {
val stream = resources.openRawResource(resId)
return BitmapFactory.decodeStream(stream)
}
If you call loadBitmapAsset(R.raw.picture)
it will load your picture.png
.
Or if you want to open all files in res/main/res/raw
as images:
@Throws(IOException::class)
fun Context.loadAllRawResourcesAsBitmaps(): List<Bitmap> {
val rawIds = R.raw::class.java.fields.map { it.int }
return rawIds.map { BitmapFactory.decodeStream(resources.openRawResource(it)) }
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论