LoginSignup
4
2

More than 1 year has passed since last update.

Jetpack Compose で ripple を丸にする

Last updated at Posted at 2022-11-23

そもそも ripple 効果は丸なのですが、この記事では ripple 効果が Composable の全体ではなくて円形で見えることを目指します。

領域を無視する方法

Jetpack Compose の ripple は indication に rememberRipple を指定することでカスタマイズできます。(指定する場合 InteractionSource も同時に指定する必要があります)

領域外までに ripple 効果を見せるには rememberRipple の bound を false にすることでできます。

Box(
    modifier = Modifier
        .clickable(
            interactionSource = remember { MutableInteractionSource() },
            indication = rememberRipple(bounded = false),
            enabled = true,
            onClick = {
                // TODO Something..
            },
        )
) {
// ...
}

結果

output1.webm.gif

領域内で円型に見せる

bound を false にする場合はレイアウトに影響がある場合もあります。
そのケースを避けたい場合は radius に表示したい ripple の半径を指定します。

Box(
    modifier = Modifier
        .width(44.dp)
        .height(44.dp)
        .clickable(
            interactionSource = remember { MutableInteractionSource() },
            indication = rememberRipple(radius = 22.dp),
            enabled = true,
            onClick = {
                // TODO Something..
            },
        )
)

結果

output2.webm.gif

縦横 44dp の Composable に半径の 22dp の radius を指定したことで、領域内にぴったりになりました。

注意

radius に指定する半径は ripple 効果の最終的の半径で、また ripple 効果は中心が基準になります。
もし click 反応する composable の領域が指定した半径より結構大きい場合は ripple 効果が真ん中を向かって縮むように見えます。

output3.webm.gif

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2