- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个调用者应用程序,允许用户从他们的手机中为联系人和铃声文件挑选照片。
当我拿起照片时,它可以使用界面上的URI正确显示。在主页和联系页面上。
我把它保存在房间数据库中......
如果我关闭应用程序并重新打开它,它会从 db 获取相同的 URI。但不显示图像。不在主页或联系页面上。
我尝试手动插入 URI 代码,但也没有显示任何内容...还将图像加载器更改为 GlideImage
来自 rememberImagePainter
(另一种实现)但同样的问题......
我从 db 和图像选择器获得的 URI 看起来像这样val uri2:Uri = "content://com.android.providers.media.documents/document/image%3A34".toUri()
获取图像 Uri 的代码是这样的
class GetContentActivityResult(
private val launcher: ManagedActivityResultLauncher<String, Uri>,
val uri: Uri?
) {
fun launch(mimeType: String) {
launcher.launch(mimeType)
}
}
@Composable
fun rememberGetContentActivityResult(): GetContentActivityResult {
var uri by rememberSaveable { mutableStateOf<Uri?>(null) }
val launcher = rememberLauncherForActivityResult(ActivityResultContracts.GetContent(), onResult = {
uri = it
})
return remember(launcher, uri) { GetContentActivityResult(launcher, uri) }
}
我像这样在联系页面中显示图像
val getContent = rememberGetContentActivityResult() <-- to access the class of pickup files
if (roomViewModel.photoUri.value.isBlank()){ <-- if no image from db display the picked image using image picker
getContent.uri?.let {
Image(
modifier = Modifier
.align(Alignment.TopCenter)
.fillMaxSize(1f),
contentDescription = "UserImage",
contentScale = ContentScale.Crop,
painter = rememberImagePainter(data = it))
}
}else{
Image(
modifier = Modifier
.align(Alignment.TopCenter)
.fillMaxSize(1f),
contentDescription = "UserImage",
contentScale = ContentScale.Crop,
painter = rememberImagePainter(data = roomViewModel.photoUri.value))
}
}
TextButton(
onClick = { getContent.launch("image/*") }, <-- launching the class to get the image URI by defining the Mime as image/*
modifier = Modifier.layoutId("changePhoto")
) {
Text(
text = "Change Photo",
color = Color.Black)}
主页面内。没有图像选择器,我只显示数据库中的数据,然后以这种方式显示图像
@OptIn(ExperimentalCoilApi::class)
@Composable
fun ProfilePicture(uri : Uri, imageSize: Dp) {
Card(
shape = CircleShape,
border = BorderStroke(
width = 2.dp,
color = Color.Red ),
modifier = Modifier.padding(16.dp),
elevation = 4.dp) {
val uri2:Uri = "content://com.android.providers.media.documents/document/image%3A34".toUri() //<-- i tried to load the image this way also it didn't work.
val painter = rememberImagePainter(
data = uri,
builder = {
placeholder(R.drawable.yara) <-- the placeholder image blinks quickly when app is loaded and then disappear...
}
)
Image(
painter = painter,
contentDescription = "User Image",
modifier = Modifier.size(imageSize) )
}
}
Uri 选择器或图像显示有问题吗?
最佳答案
好吧,我不知道怎么做 takePersistableUriPermission()
, 我还在学习。但是我创建了一个转换器类(最长的解决方案)来使用 Uri 将其转换为位图......但我必须先使其可绘制。我不知道如何直接从 Uri 做位图。
我首先更新了数据类
@Entity
data class Contact(
@PrimaryKey()
val id: UUID = UUID.randomUUID(),
val name: String,
val land_line : String,
val mobile: String,
val contact_photo: Bitmap
)
添加了
TypeConverter
对于数据库中的位图
@TypeConverter
fun fromBitmap(bitmap: Bitmap): ByteArray {
val outputStream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
return outputStream.toByteArray()
}
@TypeConverter
fun toBitmap(byteArray: ByteArray): Bitmap {
return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
}
将值类型一直更改为 UI,并在 Util 包中创建了一个转换器类,以将 Uri 转换为可绘制然后位图(我知道它看起来很愚蠢 - 任何更好的解决方案都可以接受)。
suspend fun convertToBitmap(uri: Uri, context: Context, widthPixels: Int, heightPixels: Int): Bitmap? {
val mutableBitmap = Bitmap.createBitmap(widthPixels, heightPixels, Bitmap.Config.ARGB_8888)
val canvas = Canvas(mutableBitmap)
val drawable = getDrawable(uri, context)
drawable?.setBounds(0, 0, widthPixels, heightPixels)
drawable?.draw(canvas)
return mutableBitmap
}
@OptIn(ExperimentalCoilApi::class)
suspend fun getDrawable(uri: Uri, context: Context): Drawable? {
val imageLoader = ImageLoader.Builder(context)
.availableMemoryPercentage(0.25)
.allowHardware(false)
.crossfade(true)
.build()
val request= ImageRequest.Builder(context)
.data(uri)
.build()
return imageLoader.execute(request).drawable
}
它现在正在工作并且加载完美。我知道我的宽度和高度为 50 50 px,但无论如何这是一个测试。
关于android - 使用 Uri 显示图像 -> 来自图像选择器的作品,但来自 db room 不...(Jetpack Compose),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69101073/
有没有一种简单的方法可以在 compose 中删除开关的内部填充? 我尝试在其修饰符中提供 0.dp,但它并没有摆脱内部填充 Switch( modifier = Modifier
我正在使用底部导航栏,每个菜单都会将用户导航到特定的可组合屏幕。我使用导航库来管理它们之间的导航。 我为所有可组合项使用一个通用的 ViewModel。我在其中一个可组合项中使用惰性列,当我通过单击底
我在撰写屏幕中有一个 TextField 和一个 ModalDrawer。我想在用户打开抽屉时关闭软键盘,但我一直无法弄清楚如何。在 ModalDrawer afaik 中没有触发 onOpened
我一直在搜索文档,但找不到确认。有谁知道navigation和 compose来自 Android Jetpack 的组件彼此兼容吗? 我知道Jetpack Compose尚未准备好生产,仅处于开发人
我正在尝试将我的应用程序更新为新的撰写版本,但它给了我一个我不知道如何修复的错误。当我运行时,错误仍然存在于我的运行中。我的旧项目正常工作,但我想要的是更改版本,如果有人可以帮助我,我将不胜感激
我有这样的用户界面: val scrollState = rememberScrollState() Column( modifier = Modifier
有没有办法在 Compose 中的列表(列/行)更改上获得动画效果,看起来类似于带有 setItemAnimator 的 recyclerview 动画? 最佳答案 目前没有办法用 LazyColum
我想隐藏状态栏,我已经使用伴奏库做到了这一点: val systemUiController = rememberSystemUiController() systemUiController.isS
我想隐藏状态栏,我已经使用伴奏库做到了这一点: val systemUiController = rememberSystemUiController() systemUiController.isS
使用 Android View,我可以像这样将焦点移动到 View: fun View.requestAccessibilityFocus() { requestFocus() sen
我正在尝试在我的 Android 应用程序中使用 Jetpack Compose 播放视频。要使用 ExoPlayer 进行流式传输,但我真的不明白如何实现全屏按钮,有什么建议吗? @Composab
通常可以使用修饰符将不同的形状分配给可组合项,但在此可组合项中没有这样做。 我希望图像中标记的部分是一个圆圈 你可以在下面看到我写的代码 @Composable fun StandardCheckbo
Jetpack compose 提供了很多 Material 组件,如 TextField 等。 然而,要构建类似文件编辑器的东西,可以使用什么样的组件来支持多行文本任意长的文本操作,如选择文本、剪切
我们可以使用 Scaffold 在 JetpackCompose 中使用抽屉导航如下 Scaffold( drawerContent = { Text(text ="Drawer") } )
对不起,我几乎不会说英语。 机器翻译: 如何为 Jetpack Compose 设置阴影颜色? 我可以设置阴影,但它们很难看。 Jetpack Compose 代码: Surface( mod
我正在开发一个小型 jetpack-compose 演示聊天应用程序。所以我需要在底部有一个带有 TextField 和一个要发送的按钮的栏,就像在 WhatsApp 中一样......我认为最好使用
我正在 Jetpack Compose Desktop 中创建一个应用程序,它将接受用户输入,在用户重新打开应用程序后,输入值应该在那里。我的意思是,在用户重新打开应用程序后,用户给定的数据应该在那里
描述 在 SnackbarHostState 上调用 showSnackbar 并传递 duration 参数不会关闭 Snackbar。协程似乎无限期暂停。 重现步骤: val snackbarHo
谁能建议如何在 Jetpack Compose Navigation 的不同部分共享 ViewModel? 根据文档,viewModels 通常应该在使用事件范围的不同组合函数中共享,但如果在导航内部
我想在相机预览上方创建一个半透明图层,如下所示: 我在我的应用程序中完成了相机预览,我想要的只是在预览上有一个半透明的图层,带有剪裁的卡片形状,如图所示(带有圆角)。 所以:全屏相机预览,上面有一个全
我是一名优秀的程序员,十分优秀!