onIndirectPointerGesture değiştiricisi, bileşenin bir cihazın dokunmatik alanından kaynaklananlar gibi üst düzey dolaylı işaretçi etkinliklerini almasına ve bunlara yanıt vermesine olanak tanır. Dokunmatik alan veya benzer bir kaynaktan gelen hareketleri yakalayıp işlemek için bu değiştiriciyi kullanın.
API yüzeyi
Uygulamanızın, işleme sürecini kontrol etmek için kullanabileceği dört geri çağırma vardır:
onClick: Önemli bir yatay hareket olmadan başarılı bir dokunma veya tıklama işlemiyle tetiklenir.onSwipeForward: Yatay kaydırma, ileri yönde mesafe ve hız eşiğini aştığında tetiklenir.onSwipeBackward: Yatay kaydırma, geriye doğru mesafe ve hız eşiğini aştığında tetiklenir.Enabled:falseolarak ayarlandığında değiştirici yoksayılır ve geri çağırma işlevleri çağrılmaz.
Kaydırma ve kaydırarak geçme için sistem davranışı
Sistem, tıklama ile kaydırma arasındaki farkı belirlemek için bir dokunma eşiği kullanır.
- İşaretçi, basılı durumdayken önemli ölçüde hareket ederse
onClickiptal edilir. - İşaretçi, hareket sırasında önemli ölçüde geri giderse kaydırma hareketi geçersiz kılınır.
Örnek: Bir bileşendeki kaydırma ve tıklama işlemlerini ayarlama
Aşağıdaki kod, odaklanılabilir bir Box öğesinde kaydırma ve tıklama işlemlerini ayarlar:
@Composable fun OnIndirectPointerGestureSample() { var lastGesture by remember { mutableStateOf("None") } Box( modifier = Modifier.fillMaxSize() .onIndirectPointerGesture( enabled = true, onSwipeForward = { lastGesture = "Forward" }, onSwipeBackward = { lastGesture = "Backward" }, onClick = { lastGesture = "Click" }, ) .focusTarget(), contentAlignment = Alignment.Center, ) { Text("Last Gesture: $lastGesture") } }
Kodla ilgili önemli noktalar
onIndirectPointerGestureiçin odaklanma gerektiğindenBoxöğesini odaklanabilir hale getirmek içinfocusTargetda uygulanır.focusTargetveyasurfacegibi odaklanmayı sağlayan başka bir değiştirici kullanabilirsiniz. Odaklanma olmadan değiştirici, dolaylı işaretçi etkinliklerine göre işlem yapamaz.- Bu örnekte hem
onSwipeForwardhem deonClickgeri çağırmaları uygulanır. Bu sayede, algılanan kaydırma ve tıklama hareketleri yakalanıp kullanılır ve üst kapsayıcılara ulaşmaz. Ancak bir hareketi üst kapsayıcıdaki bironIndirectPointerGesturedeğiştiriciye iletmek için belirli bir geri çağırmayı boş bırakabilirsiniz.