onIndirectPointerGesture değiştiricisi, bileşenin 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 yüzeyden veya benzer bir kaynaktan gelen hareketleri yakalamak ve 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şlemi yapıldığında 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 yönde 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şlemi yapılmaz.
Kaydırma ve ekranı kaydırma için sistem davranışı
Sistem, tıklama ve kaydırma arasında ayrım yapmak için dokunma eğimi eşiğini 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şende kaydırma ve tıklama işlemlerinin nasıl ele alınacağını ayarlama
Aşağıdaki kod, odaklanılabilir bir Box üzerinde kaydırma ve tıklama işlemlerinin işlenmesini 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
onIndirectPointerGestureodaklanmayı gerektirir. Bu nedenle,Boxöğesinin odaklanılabilir olması içinfocusTargetde uygulanır.focusTargetveyasurfacegibi başka bir odaklanmayı etkinleştirme değiştiricisini kullanabilirsiniz. Odaklanma olmadan değiştirici, dolaylı işaretçi etkinliklerine göre hareket edemez.- Bu örnekte hem
onSwipeForwardhem deonClickgeri çağırmaları uygulanır. Bu nedenle, algılanan kaydırma ve tıklama hareketleri yakalanıp tüketilir ve üst kapsayıcılara ulaşmaz. Ancak, bir hareketi üst kapsayıcıdakionIndirectPointerGesturedeğiştiricisine iletmek için belirli bir geri çağırma işlevini boş da bırakabilirsiniz.