Touch Feedback Animation comme Spotify dans Jetpack Compose

Créer un effet de clic rebondissant dans Jetpack Compose

Il est essentiel de montrer à l'utilisateur les commentaires sur les clics bla bla bal, Bref, j'aime plus l'effet de clic rebondissant de Spotify que l'effet d'ondulation par défaut, alors faisons-le

En cours de route, nous explorerons également quelques modificateurs et animations…

Cela ressemble à un vrai bouton, n'est-ce pas ? :)

Pour ce faire, nous allons créer un réutilisable Modifier(similaire au modificateur cliquable) qui diminue l' échelle et l'opacité lorsque l'élément de l'interface utilisateur est pressé.
Je vais aller de l'avant et mettre tout le code, puis l'expliquer…

/**
 * 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
        )
}

  1. Ensuite, puisque nous avons plusieurs animations que nous voulons exécuter lorsque isPressed == true, nous utilisons updateTransition()cela nous fournit des fonctions d'extension pour exécuter plusieurs animations.
  2. Pour créer les animations, nous utilisons animateFloat()l'extension pour créer deux animations, une pour scaleFactoret une pour opacity celle que nous utiliserons pour animer notre élément d'interface utilisateur.
  3. Pour modifier l'échelle et l'alpha, nous avons utilisé graphicsLayerle modificateur qui est généralement utilisé pour appliquer des transformations et des animations à un élément de l'interface utilisateur. ( consultez cet excellent article pour en savoir plus )
  4. Enfin, nous ajoutons un modificateur cliquable pour gérer le clic et supprimons l'effet d'entraînement par défaut en définissant indicationparam surnull

Voilà, profitons-en

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
        )
    }
)

      

Voilà, j'espère que vous avez aimé le blog ❤️

Suggested posts

Recherche d'informations sur les noms de domaine

Un extrait de Small, Sharp Software Tools par Brian P. Hogan

Recherche d'informations sur les noms de domaine

Lorsque vous faites une demande à facebook.com, votre ordinateur recherche le nom de domaine pour traduire ce nom de domaine en une adresse IP afin que votre ordinateur puisse établir cette connexion.

Le mot D et le mot L dans UI Design. La langue compte. Ne soyez pas raciste.

Le mot D et le mot L dans UI Design. La langue compte. Ne soyez pas raciste.

Notre langue est un outil puissant qui peut façonner nos pensées, nos attitudes et nos actions. Même des termes apparemment inoffensifs peuvent perpétuer des préjugés et des stéréotypes nuisibles.

Related posts

Le meurtre de Jordan Neely et le problème du racisme « patriotique »

Les États-Unis peuvent-ils prendre la mesure essentielle de ne pas assimiler un comportement raciste au fait d'être un bon Américain ?

Le meurtre de Jordan Neely et le problème du racisme « patriotique »

[Alerte de déclenchement : cet essai comprend des captures d'écran de personnes faisant l'éloge du meurtrier de Jordan Neely.] Les responsables de l'application des lois ont finalement - et peut-être à contrecœur - inculpé Daniel Penny, l'homme qui a étouffé Jordan Neely jusqu'à sa mort, pour cet homicide.

Qu'est-ce qui rend un podcast influent ?

Qu'est-ce qui rend un podcast influent ?

La semaine dernière, j'ai remarqué un communiqué de presse, envoyé via PressGazette (un site Web d'information britannique). L'article annonçait qu'Acast, la société d'hébergement et de publicité de podcasts de Scandi, dirigerait un consortium d'éditeurs "probablement les plus influents" du podcasting.

"La fosse des Mariannes dévoilée : dévoiler les terrifiantes vérités cachées de l'abîme"

"La fosse des Mariannes dévoilée : dévoiler les terrifiantes vérités cachées de l'abîme"

Introduction :Bienvenue, courageux lecteurs, dans un voyage qui nous emmènera dans les profondeurs les plus sombres de notre planète. Dans ce blog, nous plongeons dans le monde énigmatique de la fosse des Mariannes, découvrant ses secrets cachés et découvrant les vérités effrayantes qui se cachent sous sa surface.

Réseau TV Twitter

Réseau TV Twitter

Ce qui est vieux est à nouveau nouveau et ce qui était autrefois la chose brillante et scintillante semble maintenant terne. Je ne parle pas du retour des jeans JNCO parmi les enfants cool du centre-ville avec d'autres modes de la fin des années 1990.