Fix photo viewer flicker when opening an image
- Keep the grid composed under the viewer instead of swapping it for a black box, removing the momentary black flash while the pager draws its first frame after tapping a photo - Restore the pre-audit fade: thumbnail stays fully opaque under the fading-in full image instead of crossfading both over black
This commit is contained in:
1 parent
5832e2db4a
commit
460c50bfd9
1 file changed
+12
-20
@@ -49,8 +49,8 @@ import androidx.compose.runtime.snapshotFlow
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.draw.alpha
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.graphicsLayer
|
|
||||||
import androidx.compose.ui.layout.ContentScale
|
import androidx.compose.ui.layout.ContentScale
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
@@ -408,14 +408,6 @@ fun GalleryScreen(
|
|||||||
Box(modifier = Modifier.fillMaxSize()) {
|
Box(modifier = Modifier.fillMaxSize()) {
|
||||||
when {
|
when {
|
||||||
|
|
||||||
uiState.selectedPhoto != null -> {
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.background(Color.Black),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
!uiState.viewPreferencesLoaded -> {
|
!uiState.viewPreferencesLoaded -> {
|
||||||
Box(modifier = Modifier.fillMaxSize())
|
Box(modifier = Modifier.fillMaxSize())
|
||||||
}
|
}
|
||||||
@@ -670,16 +662,16 @@ private fun ZoomablePhoto(
|
|||||||
|
|
||||||
Box(modifier = modifier.fillMaxSize()) {
|
Box(modifier = modifier.fillMaxSize()) {
|
||||||
|
|
||||||
AsyncImage(
|
if (fullAlpha < 1f) {
|
||||||
model = remember(photo.uri, context, fadeMs) {
|
AsyncImage(
|
||||||
thumbnailDraftRequest(context, photo.uri, crossfadeMillis = fadeMs)
|
model = remember(photo.uri, context, fadeMs) {
|
||||||
},
|
thumbnailDraftRequest(context, photo.uri, crossfadeMillis = fadeMs)
|
||||||
contentDescription = null,
|
},
|
||||||
contentScale = ContentScale.Fit,
|
contentDescription = null,
|
||||||
modifier = Modifier
|
contentScale = ContentScale.Fit,
|
||||||
.fillMaxSize()
|
modifier = Modifier.fillMaxSize(),
|
||||||
.graphicsLayer { alpha = 1f - fullAlpha },
|
)
|
||||||
)
|
}
|
||||||
CoilZoomAsyncImage(
|
CoilZoomAsyncImage(
|
||||||
model = fullImageRequest,
|
model = fullImageRequest,
|
||||||
contentDescription = photo.name,
|
contentDescription = photo.name,
|
||||||
@@ -688,7 +680,7 @@ private fun ZoomablePhoto(
|
|||||||
onError = { isFullReady = false },
|
onError = { isFullReady = false },
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.graphicsLayer { alpha = fullAlpha },
|
.alpha(fullAlpha),
|
||||||
zoomState = zoomState,
|
zoomState = zoomState,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user