기존 XML 의 ImageButton 유아이에 대응되는 것이 바로 IconButton 인데요.
오늘은 이 버튼에 Ripple Effect주는 방법에 대해서 정리해 보도록 하겠습니다.
1. IconButton 에 Ripple Effect 주기
1-1. Indication
XML 에서는 ImageButton으로 구현하였던 것들은 대부분 IconButton 으로 변환할 수 있는데요.
먼저 코드를 보겠습니다.
핵심적인 부분이 바로 Modifier.Indication() 부분인데요.
Visual Effect 를 그려주는 부분이 됩니다.
IconButton(
onClick = {},
modifier = Modifier
.size(40.dp)
.indication(interactionSource, ripple)
){
Image(
painter = painterResource(id = R.drawable.test),
contentDescription = "test"
)
}
Visual effect를 그려주는 indication 함수를 보면 2개의 인자를 필요로 하는데요.
InteractionSource 와 Indication객체를 넣어주어야 합니다.
InteractionSource는 아래 코드와 같이 구할 수 있는데요.
이것은 UI요소의 변화를 감지할 수 있도록 해줍니다.
val interactionSource = remember { MutableInteractionSource() }
1-2. Indication
이제, 남은 것은, Indication 객체인데요.
이제 ripple 효과가 등장할 차례입니다.
ripple효과는 rememberRipple ()함수로 쉽게 가져올 수 있는데요.
위에 보이는 것처럼,
ripple 효과의 radius나 퍼지는 부분이 다른 UI에 잘릴 지를 bound로,
radius의 크기등도 지정할 수 있습니다.
Color도 지정할 수 있구요.
return 타입은 우리가 원하는 Indication 타입인 것을 알 수 있습니다.
1-3. 구현
정리해서, 코드로 적어보면 다음과 같은 것을 볼 수 있습니다.
val interactionSource = remember { MutableInteractionSource() }
val ripple = rememberRipple(bounded = false)
IconButton(
onClick = {},
modifier = Modifier
.size(40.dp)
.indication(interactionSource, ripple)
.padding(end = 16.dp)
){
Image(
painter = painterResource(id = R.drawable.test_image),
contentDescription = "testButton"
)
}
참고로 위에서 원래 Image의 painterResource의 id 프로퍼티는,
"R.drawable.test"와 같은 식으로 지정하는데요.
추후에 프로그래밍적으로 변동을 줄 때는 위와 같이,
mutableStateOf 타입으로 저장해서 변경해주면 됩니다.
특별히 변동되지 않는 스테틱한 버튼이라면,
id에 "R.drawable.test"와 같이 넣어주면 됩니다.
val imageResource = remember { mutableStateOf(R.drawable.test_image) }
val interactionSource = remember { MutableInteractionSource() }
val ripple = rememberRipple(bounded = false)
IconButton(
onClick = {},
modifier = Modifier
.size(40.dp)
.indication(interactionSource, ripple)
.padding(end = 16.dp)
){
Image(
painter = painterResource(id = imageResource.value),
contentDescription = "alarmButton"
)
}
이상으로 Jetpack Compose 에서 IconButton에 Ripple 효과를 주는 방법에 대해서 정리해 보았습니다.
'Android Jetpack Compose > Jetpack Compose' 카테고리의 다른 글
DisposableEffect 에서 화면종료 전 리소스 정리 구현 # 구 onDestroy jetpack Compose (0) | 2023.05.13 |
---|---|
LaunchedEffect , Side Effect 그리고 rememberCoroutine 정리 (0) | 2023.05.12 |
BackHandler 에 대한 정리 # 유저가 Back 버튼 누를 때 Jetpack Compose (1) | 2023.05.11 |
Row 와 Column 의 Arrangement 와 Space # Jetpack Compose (0) | 2023.05.02 |
Android Default Font 지정하는 방법 정리 # Theme Jetpack Compose (0) | 2023.04.30 |
TopAppBar 공유하는 방법 정리 # Jetpack Compose (0) | 2023.04.25 |
mutableStateOf 와 MutableStateFlow 비교 총정리 # collectAsState (1) | 2023.04.23 |
Paging Library 구현 방법 총정리 # Android (1) | 2023.04.17 |
collectAsState 로 Flow 타입 데이터 받기 구현 방법 # Jetpack Compose (0) | 2023.04.10 |
Jetpack Compose 화면 하단에 배치하기 (0) | 2023.03.22 |
댓글