Anastasia Rozovskaya
09/09/2021, 1:14 PManimationDrawable
or something which will enable me to have .png images replacing one another?Doris Liu
09/09/2021, 6:45 PMAnimatedContent
, where each image is associated with one state.Anastasia Rozovskaya
09/10/2021, 9:00 AMDoris Liu
09/10/2021, 5:36 PMAnastasia Rozovskaya
09/11/2021, 1:50 PMvar isClicked by remember { mutableStateOf(false) }
val imagePath: String =
if (isClicked) pressedImagePath else defaultImagePath
AssetImage(
path = imagePath,
modifier = Modifier
.size(68.dp)
.clickable(enabled = !isDisabled) {
isClicked = !isClicked
onClick.invoke()
})
// AssetImage is just a wrapper around CoilImage()
@Composable
fun AssetImage(
path: String,
modifier: Modifier,
contentScale: ContentScale = ContentScale.Crop,
) {
val context = LocalContext.current
val imageLoader = buildImageLoader(context = context)
CoilImage(
imageModel = stringResource(id = R.string.assets_path) + path,
imageLoader = imageLoader,
modifier = modifier,
contentScale = contentScale,
)
}
Anastasia Rozovskaya
09/11/2021, 1:52 PMLaunchedEffect()
but is seems useless for the case, and also AnimatedContent
as you suggested, but didn’t get the resultAnastasia Rozovskaya
09/11/2021, 8:43 PMDoris Liu
09/11/2021, 11:36 PMvar isClicked by remember { mutableStateOf(false) }
val transitionState = remember { MutableTransitionState(defaultImagePath) }
val transition = updateTranistion(transitionState)
transition.AnimatedContent(modifier = Modifier
.clickable(enabled = !isDisabled) {
isClicked = !isClicked
transitionState.targetState = if (isClicked) pressedImagePath else defaultImagePath)
onClick.invoke()
}
) {
AssetImage(Modifier.size(68.dp),path = it)
}
Doris Liu
09/11/2021, 11:40 PMonClick
wouldn't give you enough info.Doris Liu
09/11/2021, 11:43 PMdetectTapGestures
API to get the accurate timing on pressed and released, like this: https://cs.android.com/androidx/platform/tools/dokka-devsite-plugin/+/master:testData/compose/samples/animation/samples/TransitionSamples.kt;l=64-72Anastasia Rozovskaya
09/16/2021, 4:13 PMAnastasia Rozovskaya
09/16/2021, 4:17 PMvar isClicked by remember { mutableStateOf(false) }
val imagePath: String =
if (isClicked) pressedImagePath else defaultImagePath
val reversedImagePath: String =
if (isClicked) defaultImagePath else pressedImagePath
val zIndex = if (isClicked) -1f else 1f
Box {
AssetImage(
path = imagePath,
modifier = Modifier
.size(68.dp)
.zIndex(zIndex)
.clip(RoundedCornerShape(50.dp))
.clickable(enabled = !isDisabled) {
isClicked = !isClicked
onClick.invoke()
}
)
AnimatedContent(targetState = reversedImagePath) { target ->
AssetImage(path = target, modifier = Modifier
.size(68.dp)
)
}
}
Anastasia Rozovskaya
09/16/2021, 4:21 PM