Skip to content
Kapow
Esc
↑↓navigate↵open⌘Jpreview
On this page

Conditional: pushDown

Scale an element down slightly while a condition is true.

Push down makes an element look pressed. Use it for a custom button that is held down, or for an item that is being dragged.

Usage

The sample shrinks a button while the user holds it. pressed comes from your own state.

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import com.jantursky.kapow.ConditionalEffect
import com.jantursky.kapow.conditionalEffect

@Composable
fun HoldButton(pressed: Boolean) {
    Box(
        Modifier
            .size(96.dp)
            .background(Color.Gray, CircleShape)
            .conditionalEffect(pressed, ConditionalEffect.pushDown(scale = 0.9f)),
    )
}

Parameters

Parameter Default Description
scale 0.95f The size the element is drawn at while the condition holds, as a fraction of its normal size. Must be positive.
damping 0.6f Damping ratio of the spring. Below 1 it overshoots when it springs back.
stiffness 500f Stiffness of the spring. Must be positive.
dim 0f How much the element dims while pressed, from 0 to 1. Under reduced motion a dim of 0 becomes a fifth.
translation 0.dp How far the element moves down while pressed.
origin TransformOrigin.Center The point the element shrinks toward.

Reduced motion

The element keeps its size and dims slightly while the condition holds, so the pressed state still shows.

Notes

  • The element is scaled around origin (its center by default) and springs back to full size when the condition turns false.
  • The scale is applied on the element’s graphics layer. Layout keeps the real size, so neighbors don’t move.

Live example

Was this page helpful?