È essenziale mostrare all'utente il feedback del clic bla bla bal, Per farla breve, mi piace l'effetto del clic che rimbalza di Spotify più dell'effetto Ripple predefinito, quindi facciamolo
Lungo la strada, esploreremo anche alcuni modificatori e animazioni...
Per farlo creeremo un riutilizzabile Modifier(simile al modificatore cliccabile) che diminuisce la scala e l'opacità quando viene premuto l'elemento dell'interfaccia utente.
Andrò avanti e inserirò tutto il codice e poi lo spiegherò ...
/**
* Adds a bouncing click effect to a Composable.
*
* @param enabled whether the UI element should be enabled and clickable
* @param onClick the action to perform when the UI element is clicked
*/
fun Modifier.bouncingClickable(
enabled: Boolean = true,
onClick: () -> Unit
) = composed {
val interactionSource = remember { MutableInteractionSource() }
val isPressed by interactionSource.collectIsPressedAsState()
val animationTransition = updateTransition(isPressed, label = "BouncingClickableTransition")
val scaleFactor by animationTransition.animateFloat(
targetValueByState = { pressed -> if (pressed) 0.94f else 1f },
label = "BouncingClickableScaleFactorTransition",
)
val opacity by animationTransition.animateFloat(
targetValueByState = { pressed -> if (pressed) 0.7f else 1f },
label = "BouncingClickableOpacityTransition"
)
this
.graphicsLayer {
this.scaleX = scaleFactor
this.scaleY = scaleFactor
this.alpha = opacity
}
.clickable(
interactionSource = interactionSource,
indication = null,
enabled = enabled,
onClick = onClick
)
}
isPressed == true, usiamo updateTransition()che ci fornisce funzioni di estensione per eseguire più animazioni.animateFloat()l'estensione per creare due animazioni, una per scaleFactore una per opacity quella che useremo per animare il nostro elemento dell'interfaccia utente.graphicsLayerModifier, che di solito viene utilizzato per applicare trasformazioni e animazioni a un elemento dell'interfaccia utente. ( dai un'occhiata a questo fantastico articolo per saperne di più )indicationparam sunullEcco, usiamolo
Box(
modifier = Modifier
.bouncingClickable {
println("Clicked...")
}
.size(100.dp)
.clip(CircleShape)
.background(Color.Black)
) {}
val scaleFactor by animationTransition.animateFloat(
targetValueByState = { pressed -> if (pressed) 0.94f else 1f },
label = "BouncingClickableScaleFactorTransition",
transitionSpec = {
spring(
dampingRatio = Spring.DampingRatioMediumBouncy,
stiffness = Spring.StiffnessLow
)
}
)
Ecco fatto, spero che il blog ti sia piaciuto ❤️
Quando fai una richiesta a facebook.com, il tuo computer cerca il nome di dominio per tradurre quel nome di dominio in un indirizzo IP in modo che il tuo computer possa effettuare quella connessione.
La nostra lingua è uno strumento potente che può modellare i nostri pensieri, atteggiamenti e azioni. Anche termini apparentemente innocui possono perpetuare pregiudizi e stereotipi dannosi.
“Mi proteggerà quando sarò in pericolo. mi nasconderà nella sua tenda.
Nel mondo interconnesso di oggi, la minaccia degli attacchi informatici è più diffusa che mai. I criminali informatici e gli attori dello stato-nazione cercano costantemente di sfruttare le vulnerabilità e rubare dati preziosi, ponendo un rischio significativo per le organizzazioni di tutte le dimensioni.
"Ehi Siri, suona Me Dive di Olivia Dean." Era maggio 2021 quando ho iniziato il mio tirocinio presso la Future Academy Africa ad Akure, in Nigeria.
(Attenzione: questa è satira, destinata ad essere allegramente sovversiva, sicuramente non per bambini) Hai visto tua madre e tuo padre nascondersi in cucina e fumare quelle sigarette puzzolenti. Ti dicono.