调整部分 UI

This commit is contained in:
2024-08-24 14:39:01 +08:00
parent 07f825c783
commit 1b41e98011
11 changed files with 90 additions and 38 deletions

View File

@@ -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.

View File

@@ -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,