@RestrictsSuspension
@JvmDefaultWithCompatibility /* = JvmDefaultWithCompatibility */
public interface AwaitPointerEventScope
: Density
터치 이벤트를 비동기적으로 기다리는 데 사용되는 스코프. 사용자가 터치 입력을 수행하는 동안 발생하는 여러 이벤트를 처리하는 데 필요한 기능 제공
주로 Modifier.pointerInput
와 함께 사용
비동기 이벤트 대기
val size: IntSize
- 주로 UI 요소의 크기를 나타냄. 터치 이벤트가 발생할 수 있는 영역의 크기 제공
val extendedTouchPadding: Size
- 터치 영역을 확장하기 위한 추가적인 패딩 영역
val currentEvent: PointerEvent
- 현재 처리되고 있는 포인터 이벤트(탭, 드래그 등)에 대한 정보를 제공
val viewConfiguration: ViewConfiguration
- 터치 민감도, 스크롤 속도 등에 대한 정보
awaitPointerEvent: 현재 coroutine scope안에서 새로운 포언티 이벤트가 발생할 때까지 일시 정지되며 이벤트가 발생하면 반환.
public abstract suspend fun awaitPointerEvent(
pass: PointerEventPass = PointerEventPass.Main
): PointerEvent
withTimeout(withTimeoutOrNull): timeMillis이 초과하면 TimeoutCancellationException
(null
)을 발생시키는 함수
public open suspend fun <T> withTimeout(
timeMillis: Long,
block: suspend AwaitPointerEventScope.() -> T
): T
awaitFirstDown: 사용자가 처음 화면을 터치했을 때의 이벤트를 대기
public suspend fun AwaitPointerEventScope.awaitFirstDown(
requireUnconsumed: Boolean = true,
pass: PointerEventPass = PointerEventPass.Main
): PointerInputChange
horizontalDrag : 터치한 id에 해당하는 아이템이 수평으로 드래그될 때의 이벤트를 처리
suspend fun AwaitPointerEventScope.horizontalDrag(
pointerId: PointerId,
onDrag: (PointerInputChange) -> Unit
): Boolean = drag(
pointerId = pointerId,
onDrag = onDrag,
orientation = Orientation.Horizontal,
motionConsumed = { it.isConsumed }
) != null
sealed interface LazyStaggeredGridScope {
fun item(
key: Any? = null,
contentType: Any? = null,
span: StaggeredGridItemSpan? = null,
content: @Composable LazyStaggeredGridItemScope.() -> Unit
)
fun items(
count: Int,
key: ((index: Int) -> Any)? = null,
contentType: (index: Int) -> Any? = { null },
span: ((index: Int) -> StaggeredGridItemSpan)? = null,
itemContent: @Composable LazyStaggeredGridItemScope.(index: Int) -> Unit
)
item 함수는 Lazy Staggered Grid에 단일 아이템을 추가합니다.
key (default : 항목의 위치가 키)
contentType (default : 모든 item은 어떤 유형에도 속하게 간주)
span(default : itme이 하나의 레인을 사용)
class StaggeredGridItemSpan private constructor(internal val value: Int) {
companion object {
// 가로축 전체 사용
val FullLine = StaggeredGridItemSpan(0)
// 지정된 column의 길이 전체 사용
val SingleLane = StaggeredGridItemSpan(1)
}
}
content
@JvmDefaultWithCompatibility
interface PointerInputScope : Density
터치 및 포인터 입력을 처리. 해당 스코프는 포인터 입력을 수신하고, 해당 입력에 대한 반응을 정의하는데 필요한 여러기능과 도구를 포함
Modifier.pointerInput 수정자의 스코프
coroutine scope에서 동작
awaitPointerEventScope
함수를 사용하여 특정 포인터 이벤트 대기val size: IntSize
awaitPointerEventScope : 발생하는 포인터 이벤트를 해당 스코프안에서 처리
suspend fun <R> awaitPointerEventScope(
block: suspend AwaitPointerEventScope.() -> R
): R
detectTapGestures
public suspend fun PointerInputScope.detectTapGestures(
onDoubleTap: ((Offset) -> Unit)? = null,
onLongPress: ((Offset) -> Unit)? = null,
onPress: suspend PressGestureScope.(Offset) -> Unit = NoPressGesture,
onTap: ((Offset) -> Unit)? = null
): Unit
detectDragGestures: 드래그 제스처를 감지하고, 각각의 이벤트 처리
public suspend fun PointerInputScope.detectDragGestures(
onDragStart: (Offset) -> Unit = { },
onDragEnd: () -> Unit = { },
onDragCancel: () -> Unit = { },
onDrag: (change: PointerInputChange, dragAmount: Offset) -> Unit
): Unit
등등