Vaibhav Jaiswal
04/26/2024, 11:13 AM@Composable
fun MediaZoomableImage(
url: String,
placeholder: Painter? = null,
error: Painter? = placeholder,
contentDescription: String,
modifier: Modifier = Modifier,
contentScale: ContentScale = ContentScale.Fit
) {
setSingletonImageLoaderFactory { context ->
ImageLoader.Builder(context)
.crossfade(true)
.dispatcher(Dispatchers.Default)
.build()
}
Zoomable {
AsyncImage(
model = url,
contentDescription = contentDescription,
modifier = modifier,
contentScale = contentScale,
placeholder = remember { placeholder },
error = remember { error },
)
}
}
Vaibhav Jaiswal
04/26/2024, 11:14 AMModifier.aspectRatio()
Vaibhav Jaiswal
04/26/2024, 11:28 AM@Composable
fun MedialZoomableImage(
url: String,
placeholder: Painter? = null,
error: Painter? = placeholder,
contentDescription: String,
modifier: Modifier = Modifier,
contentScale: ContentScale = ContentScale.Fit
) {
setSingletonImageLoaderFactory { context ->
ImageLoader.Builder(context)
.crossfade(true)
.dispatcher(Dispatchers.Default)
.build()
}
val painter = rememberAsyncImagePainter(
model = ImageRequest.Builder(LocalPlatformContext.current)
.data(url)
.size(coil3.size.Size.ORIGINAL)
.build(),
placeholder = placeholder,
error = error,
contentScale = contentScale
)
Zoomable {
val size = painter.intrinsicSize
Image(
painter = painter,
contentDescription = contentDescription,
modifier = modifier.conditional(
size != Size.Unspecified,
Modifier.aspectRatio(size.width / size.height)
),
contentScale = contentScale
)
}
}
crashes with Size is UnspecifiedAlbert Chang
04/26/2024, 4:03 PMval painter = rememberAsyncImagePainter(...)
when(painter.state) {
AsyncImagePainter.State.Empty -> ...
is AsyncImagePainter.State.Loading -> ...
is AsyncImagePainter.State.Error -> ...
is AsyncImagePainter.State.Success -> {
val size = painter.intrinsicSize
Zoomable {
Image(
painter = painter,
contentDescription = null,
modifier = Modifier
.aspectRatio(size.width / size.height)
.fillMaxSize()
)
}
}
}
Vaibhav Jaiswal
04/26/2024, 4:04 PMAlbert Chang
04/26/2024, 4:09 PMVaibhav Jaiswal
04/26/2024, 4:10 PMval painter = rememberAsyncImagePainter(url)
Crossfade(painter.state, modifier){
when(it){
AsyncImagePainter.State.Empty -> Unit
is AsyncImagePainter.State.Error -> {
error?.let { errorPainter ->
Image(
painter = errorPainter,
contentDescription = contentDescription,
modifier = Modifier.fillMaxSize(),
contentScale = contentScale
)
}
}
is AsyncImagePainter.State.Loading -> {
placeholder?.let { placeholderPainter ->
Image(
painter = placeholderPainter,
contentDescription = contentDescription,
modifier = Modifier.fillMaxSize(),
contentScale = contentScale
)
}
}
is AsyncImagePainter.State.Success -> {
Zoomable {
val size = it.painter.intrinsicSize
Image(
painter = it.painter,
contentDescription = contentDescription,
modifier = Modifier.fillMaxSize().aspectRatio(size.width / size.height),
contentScale = contentScale
)
}
}
}
}
Albert Chang
04/26/2024, 4:19 PMVaibhav Jaiswal
04/27/2024, 8:46 AMZoomable {
AsyncImage(
model = url,
contentDescription = contentDescription,
modifier = modifier,
contentScale = contentScale,
placeholder = remember { placeholder },
error = remember { error },
)
}