Я пытаюсь использовать платформу для обмена файлами WebP для Android и файлами Heic для iOS для изображений с одинаковыми именами? Например, у меня есть файл home . Итак, у нас будет home.webp для Android и home.heic для iOS. Я знаю, что мы можем просто поместить веб-страницу в androidMain/res/drawable-{density}/home.webp для Android. И назовите это так:
/// Common Main
expect class PlatformImage
class ImageAsset(
val name: String
) {
@Composable
fun toImage(): PlatformImage? = getPlatformImage()
override fun toString(): String = name
}
@Composable
internal expect fun ImageAsset.getPlatformImage(): PlatformImage?
/// Android Main
/// Should manually copy the assets to `androidMain/res/drawable-{density}/` first
actual typealias PlatformImage = Painter
@Composable
internal actual fun ImageAsset.getPlatformImage(): PlatformImage? {
Resources resources = context.getResources();
final int resourceId = resources.getIdentifier(name, "drawable",
context.getPackageName());
final drawable = resources.getDrawable(resourceId);
return painterResource(drawable);
}
А как насчет iOS? Я имел в виду следующее. Это правильно?
/// iOS Main
/// Should manually copy the assets to `iosMain/res/xcassets/` first? Not sure.
/// is this correct?
actual typealias PlatformImage = UIImage
@Composable
internal actual fun ImageAsset.getPlatformImage(): PlatformImage? {
return UIImage.imageNamed(this.name)
}
Спасибо.
PS:
Платформа будет использоваться совместно с помощью Gradle для Android и SPM для iOS.
Причина, по которой мы разделяем ресурсы таким образом, заключается в том, что мы хотим оптимизировать сборку для уменьшения количества приложений и преимущества размеров как WebP, так и Heic.
В основное приложение iOS фреймворк будет встроен в него. Таким образом, каталог ресурсов платформы можно будет использовать в основном приложении.
Я пытаюсь использовать платформу для обмена файлами WebP для Android и файлами Heic для iOS для изображений с одинаковыми именами? Например, у меня есть файл home . Итак, у нас будет home.webp для Android и home.heic для iOS. Я знаю, что мы можем просто поместить веб-страницу в androidMain/res/drawable-{density}/home.webp для Android. И назовите это так: [code]/// Common Main expect class PlatformImage
class ImageAsset( val name: String ) { @Composable fun toImage(): PlatformImage? = getPlatformImage()
override fun toString(): String = name }
@Composable internal expect fun ImageAsset.getPlatformImage(): PlatformImage?
/// Android Main /// Should manually copy the assets to `androidMain/res/drawable-{density}/` first actual typealias PlatformImage = Painter
@Composable internal actual fun ImageAsset.getPlatformImage(): PlatformImage? { Resources resources = context.getResources(); final int resourceId = resources.getIdentifier(name, "drawable", context.getPackageName()); final drawable = resources.getDrawable(resourceId); return painterResource(drawable); } [/code] А как насчет iOS? Я имел в виду следующее. Это правильно? [code]/// iOS Main /// Should manually copy the assets to `iosMain/res/xcassets/` first? Not sure. /// is this correct?
actual typealias PlatformImage = UIImage
@Composable internal actual fun ImageAsset.getPlatformImage(): PlatformImage? { return UIImage.imageNamed(this.name) } [/code] Спасибо. PS: [list] [*]Платформа будет использоваться совместно с помощью Gradle для Android и SPM для iOS. [*]Причина, по которой мы разделяем ресурсы таким образом, заключается в том, что мы хотим оптимизировать сборку для уменьшения количества приложений и преимущества размеров как WebP, так и Heic. [*]В основное приложение iOS фреймворк будет встроен в него. Таким образом, каталог ресурсов платформы можно будет использовать в основном приложении. [/list]