Compose๋ฅผ ์ด์ฉํด RecyclerView๋ฅผ ๋ค ๊ต์ฒดํ๋๋ฐ, ์์ดํ Long Press๋ฅผ ๊ฐ์งํด์ผ๋๋ ์ผ์ด ์๊ฒผ๋ค.
๊ทธ๋์์ Long Press๋ฅผ ์ธ ํ์๊ฐ ์์ด์ clickable ์์์ ์ฒ๋ฆฌํ๋๋ฐ ํ๋ฒ ๋ฐ๊ฟ๋ณด์.
Modifier
.combinedClickable(
onClick = { },
onLongClick = { },
)
์ ์ผ ๋จผ์ ์๋ํด๋ณธ ๋ฐฉ๋ฒ์ด๋ค. ๊ทธ๋ฌ๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋์๋๋ฐ MediationSource๋ฅผ ์ ๊ณตํด์ผ๋จ์ ๋ฐ๋ผ ์ฌ์ฉ์ ์ด๋ ค์์ด ์๋ค... 2022๋ ๊น์ง๋ ์ ๋๋ ๊ฒ์ผ๋ก ํ์ธ๋๋ค.
์กฐ๊ธ ๋ ์ฐพ์๋ณด๋ pointerInput๋ฅผ ์ด์ฉํด ์ ์ค์ฒ๋ฅผ ๊ฐ์งํ๋ ๋ฐฉ๋ฒ์ ๊ถ์ฅํ๊ณ ์์๋ค.
Modifier.pointerInput(Unit) {
detectTapGestures(
onPress = { /* Called when the gesture starts */ },
onDoubleTap = { /* Called on Double Tap */ },
onLongPress = { /* Called on Long Press */ },
onTap = { /* Called on Tap */ }
)
}
pointerInput์ detectTapGestures๋ฅผ ์ฐ๊ฒฐํด ์ํ๋ ํด๋ฆญ์ด๋ฒคํธ๋ฅผ ์ข ๋ฅ๋ณ๋ก ์ฒ๋ฆฌํ ์ ์์๋ค. ์ ์ฝ๋๋ ์ฌ์ฉ์์ ์ฝ๋์ด๊ณ ์กฐ๊ธ ๋ ์์ธํ ํ๋ณด์.
suspend fun PointerInputScope.detectTapGestures(
onDoubleTap: ((Offset) -> Unit)? = null,
onLongPress: ((Offset) -> Unit)? = null,
onPress: suspend PressGestureScope.(Offset) -> Unit = NoPressGesture,
onTap: ((Offset) -> Unit)? = null
): Unit
๊ฐ ํจ์์ ๋งค๊ฐ๋ณ์๋ก Offset์ ๋ฐ๋๋ค.
Offset์ ์ด์ฉํด ์ํ๋ฅผ ๊ฐ์งํ๋๋ฐ, ํฌ์ธํฐ ๋ค์ด(ํฐ์น ์์), ํฌ์ธํฐ ์ (์ ๋)์ ๊ธฐ์ค์ผ๋ก ์๋ํ๊ณ ์ต์ด ํฌ์ธํฐ ๋ค์ด ํ ๋ค๋ฅธ ํฌ์ธํฐ ๋ค์ด์ด ์๊ธฐ๋ฉด ์ด์ ์ ์ค์ฒ๊ฐ ์ทจ์๋๋ค. ๋ฐ๋๋ก ํฌ์ธํฐ ๋ค์ด ํ ํฌ์ธํฐ ์ ์ด๋ฉด ๋ค์ด ์ ์ค์ฒ๊ฐ ์๋น๋๋ฉด์ ์ 4๊ฐ์ง ํจ์ ์ค ํ๋๋ฅผ ์คํํ๊ฒ ๋๋ค. ๋ ๋ค์ด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๊ณณ์์ ์๋น๋๋๊ฒ ์๋๋ผ, ๋ค๋ฅธ ๊ณณ์์ ์๋น๋๋ค๋ฉด ์ด๊ฑด Tap์ผ๋ก ์น์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ค์ฒ๋ฅผ ๊ฑด๋ ๋ด๋ค.
Modifier
.fillMaxWidth()
.padding(0.dp, 2.dp, 0.dp, 4.dp)
.pointerInput(Unit) {
detectTapGestures(
onLongPress = {
if (sharedViewModel.isManager) {
viewModel.deletePost(post.date)
}
}
)
}
๊ธฐ๋ณธ์ ์ผ๋ก๋ null๋ก ์ด๊ธฐํ ๋์ด ์์ด์ ํ์ํ ๊ฒ๋ง ์ฌ์ฉํ๋ฉด ๋์ง๋ง, onDoubleTap์ด ๋นํ์ฑํ ๋์ด์๋๋ฐ ๋๋ฒ ํญํ๋ฉด ๊ทธ๊ฑด Tap์ผ๋ก ์ฒ๋ฆฌ๋๋ค. ๋๋จธ์ง ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ค.
https://developer.android.com/jetpack/compose/gestures?hl=ko#tapping
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์! ๋ก๊ทธ์ธ ์ํด๋ ๋ฉ๋๋ค ^_^
'Android ๐ฅ๏ธ > ์ฝ์งโ๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฉํฐ๋ชจ๋ ๋์ ๊ธฐ(1) (0) | 2023.12.15 |
---|---|
textview์์ selector ์ฌ์ฉํ๊ธฐ (0) | 2023.12.15 |
java.lang.NoSuchMethodError: 'kotlin.sequences.Sequence com.google.devtools.ksp.processing.Resolver.getPackagesWithAnnotation(java.lang.String)' (0) | 2023.11.20 |
Compose์์ BottomSheetLayout ์ธ ๋ Drag ๋ฌด์ํ๊ธฐ (0) | 2023.11.06 |
Safe args ์ฌ์ฉํ๊ธฐ (0) | 2023.10.11 |