Touch Feedback Animation, jak Spotify w Jetpack Compose

Zbuduj efekt odbijającego się kliknięcia w Jetpack Compose

Istotne jest, aby pokazać użytkownikowi informację zwrotną o kliknięciu bla bla bal, Krótko mówiąc, efekt odbijającego się kliknięcia w Spotify podoba mi się bardziej niż domyślny efekt Ripple, więc zróbmy to

Po drodze przyjrzymy się też niektórym modyfikatorom i animacji…

Wydaje się, że to prawdziwy przycisk, prawda? :)

Aby to zrobić, stworzymy wielokrotnego użytku Modifier(podobnie jak klikalny modyfikator), który zmniejsza skalę i krycie po naciśnięciu elementu interfejsu użytkownika.
Pójdę dalej i umieszczę cały kod, a następnie wyjaśnię…

/**
 * 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. Następnie, ponieważ mamy wiele animacji, które chcemy uruchomić, gdy isPressed == true, używamy updateTransition()tego, co zapewnia nam funkcje rozszerzające do uruchamiania wielu animacji.
  2. Aby utworzyć animacje, używamy animateFloat()rozszerzenia do utworzenia dwóch animacji, jednej dla scaleFactori jednej opacity , której użyjemy do animowania naszego elementu interfejsu użytkownika.
  3. Aby zmienić skalę i alfa, użyliśmy graphicsLayermodyfikatora, który jest zwykle używany do stosowania transformacji i animacji elementu interfejsu użytkownika. ( sprawdź ten wspaniały artykuł, aby dowiedzieć się więcej )
  4. Na koniec dodajemy klikalny modyfikator do obsługi kliknięć i usuwamy domyślny efekt falowania, ustawiając indicationparametr nanull

To tyle, korzystajmy

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

      

To tyle, mam nadzieję, że blog wam się spodobał ❤️

Suggested posts

Wyszukiwanie informacji o nazwach domen

Fragment książki Small, Sharp Software Tools autorstwa Briana P. Hogana

Wyszukiwanie informacji o nazwach domen

Kiedy wysyłasz żądanie do facebook.com, Twój komputer wyszukuje nazwę domeny, aby przetłumaczyć tę nazwę domeny na adres IP, aby komputer mógł nawiązać to połączenie.

Słowo D i słowo L w projektowaniu interfejsu użytkownika. Język ma znaczenie. Nie bądź rasistą.

Słowo D i słowo L w projektowaniu interfejsu użytkownika. Język ma znaczenie. Nie bądź rasistą.

Nasz język jest potężnym narzędziem, które może kształtować nasze myśli, postawy i działania. Nawet pozornie nieszkodliwe terminy mogą utrwalać szkodliwe uprzedzenia i stereotypy.

Related posts

Rewolucja w miejscu pracy: najlepsi eksperci omawiają pracę hybrydową i zdalną

Rewolucja w miejscu pracy: najlepsi eksperci omawiają pracę hybrydową i zdalną

W dzisiejszym szybko zmieniającym się krajobrazie biznesowym koncepcja pracy hybrydowej i zdalnej nabrała bezprecedensowego rozpędu. Ponieważ firmy wciąż dostosowują się do zmieniających się potrzeb i oczekiwań swoich pracowników, eksperci z różnych dziedzin zebrali się, aby omówić korzyści, wyzwania i przyszłość tego transformacyjnego sposobu pracy.

Finansowanie usuwania dwutlenku węgla w RO24

Podział wniosków o środki Carbon180 na różne ścieżki

Finansowanie usuwania dwutlenku węgla w RO24

Autor: Alyson Lee, doradca zarządzający ds. spraw rządowych Coroczny proces przyznawania środków przez rząd federalny ma kluczowe znaczenie dla naszych wysiłków na rzecz sfinansowania usuwania dwutlenku węgla (CDR). Każdego roku Carbon180 przesyła prośby do różnych biur kongresowych, aby pomóc wskazać, gdzie będą płynąć dolary w przyszłym roku.

Wyzwanie czytelnicze Goodreads jest toksyczne

Wyzwanie czytelnicze Goodreads jest toksyczne

Swędzenie w mojej dłoni rozszerzyło się, gdy targowałem się z miejscowym księgarzem o kolejną książkę. Ta książka, podobnie jak pozostałe, które ostatnio kupiłem, znalazłaby swój tron ​​na moim stosie „Do przeczytania” (TBR); a mimo to kupiłem.

Telewizja sieciowa Twitter

Telewizja sieciowa Twitter

To, co stare, jest teraz znowu nowe, a to, co kiedyś było lśniącą, błyszczącą rzeczą, teraz wydaje się nudne. Nie mówię o dżinsach JNCO, które powróciły wśród fajnych dzieciaków w śródmieściu wraz z innymi modami późnych lat 90.