调整部分 UI
This commit is contained in:
@@ -19,8 +19,8 @@ import coil.request.ImageRequest
|
||||
import com.aiosman.riderpro.utils.BlurHashDecoder
|
||||
import com.aiosman.riderpro.utils.Utils.getImageLoader
|
||||
|
||||
private const val DEFAULT_HASHED_BITMAP_WIDTH = 4
|
||||
private const val DEFAULT_HASHED_BITMAP_HEIGHT = 3
|
||||
const val DEFAULT_HASHED_BITMAP_WIDTH = 4
|
||||
const val DEFAULT_HASHED_BITMAP_HEIGHT = 3
|
||||
|
||||
/**
|
||||
* This function is used to load an image asynchronously and blur it using BlurHash.
|
||||
|
||||
@@ -12,10 +12,12 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.core.graphics.drawable.toBitmap
|
||||
import androidx.core.graphics.drawable.toDrawable
|
||||
import coil.ImageLoader
|
||||
import coil.compose.AsyncImage
|
||||
import coil.request.ImageRequest
|
||||
import coil.request.SuccessResult
|
||||
import com.aiosman.riderpro.utils.BlurHashDecoder
|
||||
import com.aiosman.riderpro.utils.Utils.getImageLoader
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
@@ -40,18 +42,53 @@ fun rememberImageBitmap(imageUrl: String, imageLoader: ImageLoader): Bitmap? {
|
||||
|
||||
return bitmap
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun CustomAsyncImage(
|
||||
context: Context,
|
||||
imageUrl: String,
|
||||
contentDescription: String?,
|
||||
modifier: Modifier = Modifier,
|
||||
blurHash: String? = null,
|
||||
contentScale: ContentScale = ContentScale.Crop
|
||||
) {
|
||||
val bitmap = rememberImageBitmap(imageUrl, getImageLoader(context))
|
||||
val imageLoader = getImageLoader(context)
|
||||
val blurBitmap = remember(blurHash) {
|
||||
blurHash?.let {
|
||||
BlurHashDecoder.decode(
|
||||
blurHash = it,
|
||||
width = DEFAULT_HASHED_BITMAP_WIDTH,
|
||||
height = DEFAULT_HASHED_BITMAP_HEIGHT
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
var bitmap by remember(imageUrl) { mutableStateOf<Bitmap?>(null) }
|
||||
|
||||
LaunchedEffect(imageUrl) {
|
||||
if (bitmap == null) {
|
||||
val request = ImageRequest.Builder(context)
|
||||
.data(imageUrl)
|
||||
.crossfade(true)
|
||||
.build()
|
||||
|
||||
val result = withContext(Dispatchers.IO) {
|
||||
(imageLoader.execute(request) as? SuccessResult)?.drawable?.toBitmap()
|
||||
}
|
||||
bitmap = result
|
||||
}
|
||||
}
|
||||
|
||||
AsyncImage(
|
||||
model = bitmap,
|
||||
model = bitmap ?: ImageRequest.Builder(context)
|
||||
.data(imageUrl)
|
||||
.crossfade(true)
|
||||
.apply {
|
||||
if (blurBitmap != null) {
|
||||
placeholder(blurBitmap.toDrawable(context.resources))
|
||||
}
|
||||
}
|
||||
.build(),
|
||||
contentDescription = contentDescription,
|
||||
modifier = modifier,
|
||||
contentScale = contentScale,
|
||||
|
||||
Reference in New Issue
Block a user