---
title: "createRippleModifierNode"
description: "Creates a Ripple node using the values provided.

A Ripple is a Material implementation of [Indication] that expresses different [Interaction]s by
drawing ripple animations and state layers.

A Ripple responds to [PressInteraction.Press] by starting a new [RippleAnimation], and responds
to other [Interaction]s by showing a fixed [StateLayer] with varying alpha values depending on
the [Interaction].

This Ripple node is a low level building block for building IndicationNodeFactory implementations
that use a Ripple - higher level design system libraries such as material and material3 provide
[Indication] implementations using this node internally. In most cases you should use those
factories directly: this node exists for design system libraries to delegate their Ripple
implementation to, after querying any required theme values for customizing the Ripple.

NOTE: when using this factory with [DelegatingNode.delegate], ensure that the node is created
once or [DelegatingNode.undelegate] is called in [Modifier.Node.onDetach]. Repeatedly delegating
to a new node returned by this method in [Modifier.Node.onAttach] without removing the old one
will result in multiple ripple nodes being attached to the node."
type: "function"
---

<div class='type'>Function</div>


<a id='references'></a>
<div class='sourceset sourceset-common'>Common</div>


```kotlin
public fun createRippleModifierNode(
    interactionSource: InteractionSource,
    bounded: Boolean,
    radius: Dp,
    color: ColorProducer,
    rippleAlpha: () -> RippleAlpha,
): DelegatableNode
```


Creates a Ripple node using the values provided.

A Ripple is a Material implementation of `Indication` that expresses different `Interaction`s by
drawing ripple animations and state layers.

A Ripple responds to `PressInteraction.Press` by starting a new `RippleAnimation`, and responds
to other `Interaction`s by showing a fixed `StateLayer` with varying alpha values depending on
the `Interaction`.

This Ripple node is a low level building block for building IndicationNodeFactory implementations
that use a Ripple - higher level design system libraries such as material and material3 provide
`Indication` implementations using this node internally. In most cases you should use those
factories directly: this node exists for design system libraries to delegate their Ripple
implementation to, after querying any required theme values for customizing the Ripple.

NOTE: when using this factory with `DelegatingNode.delegate`, ensure that the node is created
once or `DelegatingNode.undelegate` is called in `Modifier.Node.onDetach`. Repeatedly delegating
to a new node returned by this method in `Modifier.Node.onAttach` without removing the old one
will result in multiple ripple nodes being attached to the node.

#### Parameters

| | |
| --- | --- |
| interactionSource | the `InteractionSource` used to determine the state of the ripple. |
| bounded | if true, ripples are clipped by the bounds of the target layout. Unbounded ripples always animate from the target layout center, bounded ripples animate from the touch position. |
| radius | the radius for the ripple. If `Dp.Unspecified` is provided then the size will be calculated based on the target layout size. |
| color | the color of the ripple. This color is usually the same color used by the text or iconography in the component. This color will then have `rippleAlpha` applied to calculate the final color used to draw the ripple. |
| rippleAlpha | the `RippleAlpha` that will be applied to the `color` depending on the state of the ripple. |




