Filter use case - good practice

ioc-workshop
raystatic 2 months ago
parent edbd6f7cb7
commit 14c39ceaaf
No known key found for this signature in database

@ -103,7 +103,7 @@ fun FilterScreen(modifier: Modifier = Modifier) {
val sourceBitmap = remember { decodeSourceBitmap(context) } val sourceBitmap = remember { decodeSourceBitmap(context) }
val previewBitmap = createFilteredBitmap(sourceBitmap, selectedFilter) val sourceImage = remember(sourceBitmap) { sourceBitmap.asImageBitmap() }
Column( Column(
modifier = modifier modifier = modifier
@ -122,23 +122,23 @@ fun FilterScreen(modifier: Modifier = Modifier) {
Spacer(modifier = Modifier.height(12.dp)) Spacer(modifier = Modifier.height(12.dp))
Image( Image(
bitmap = previewBitmap.asImageBitmap(), bitmap = sourceImage,
contentDescription = "Filtered Preview (${selectedFilter.name})", contentDescription = "Filtered Preview (${selectedFilter.name})",
modifier = Modifier modifier = Modifier
.size(300.dp) .size(300.dp)
.clip(RoundedCornerShape(12.dp)) .clip(RoundedCornerShape(12.dp))
.background(Color.LightGray), .background(Color.LightGray),
contentScale = ContentScale.Crop contentScale = ContentScale.Crop,
colorFilter = selectedFilter.colorFilter
) )
Spacer(modifier = Modifier.height(12.dp)) Spacer(modifier = Modifier.height(12.dp))
LazyRow(horizontalArrangement = Arrangement.spacedBy(12.dp)) { LazyRow(horizontalArrangement = Arrangement.spacedBy(12.dp)) {
items(FILTERS, key = { it.name }) { filter -> items(FILTERS, key = { it.name }) { filter ->
val thumbnail = createFilteredBitmap(sourceBitmap, filter)
FilterThumbnail( FilterThumbnail(
image = thumbnail.asImageBitmap(), image = sourceImage,
name = filter.name, filter = filter,
selected = filter == selectedFilter, selected = filter == selectedFilter,
onClick = { selectedFilter = filter} onClick = { selectedFilter = filter}
) )
@ -166,7 +166,7 @@ fun FilterScreen(modifier: Modifier = Modifier) {
@Composable @Composable
fun FilterThumbnail( fun FilterThumbnail(
image: ImageBitmap, image: ImageBitmap,
name: String, filter: ImageFilter,
selected: Boolean, selected: Boolean,
onClick: () -> Unit onClick: () -> Unit
) { ) {
@ -186,14 +186,15 @@ fun FilterThumbnail(
) { ) {
Image( Image(
bitmap = image, bitmap = image,
contentDescription = name, contentDescription = filter.name,
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
contentScale = ContentScale.Crop contentScale = ContentScale.Crop,
colorFilter = filter.colorFilter
) )
} }
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
Text( Text(
text = name, text = filter.name,
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
fontWeight = if (selected) FontWeight.Bold else FontWeight.Normal fontWeight = if (selected) FontWeight.Bold else FontWeight.Normal
) )

@ -24,6 +24,7 @@ import android.graphics.Canvas
import android.graphics.ColorMatrix import android.graphics.ColorMatrix
import android.graphics.ColorMatrixColorFilter import android.graphics.ColorMatrixColorFilter
import android.graphics.Paint import android.graphics.Paint
import androidx.compose.ui.graphics.ColorFilter
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import com.google.samples.apps.nowinandroid.feature.interests.impl.R import com.google.samples.apps.nowinandroid.feature.interests.impl.R
import java.io.File import java.io.File
@ -32,7 +33,9 @@ import java.io.FileOutputStream
class ImageFilter( class ImageFilter(
val name: String, val name: String,
val matrix: FloatArray val matrix: FloatArray
) ) {
val colorFilter by lazy { ColorFilter.colorMatrix(androidx.compose.ui.graphics.ColorMatrix(matrix)) }
}
val FILTERS = listOf( val FILTERS = listOf(
ImageFilter( ImageFilter(

Loading…
Cancel
Save