onIndirectPointerGesture değiştiricisi, bileşenin yüksek düzeydeki dolaylı işaretçi etkinliklerini (ör. bir cihazın dokunmatik alanından kaynaklananlar) 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ş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 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, kapalı 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şlemlerini yönetme
Aşağıdaki kod, odaklanılabilir bir Box üzerinde kaydırma ve tıklama işlemlerinin işlenmesini ayarlar:
@Composable @Sampled fun OnIndirectPointerGestureSample() { Box( modifier = Modifier.fillMaxSize() .onIndirectPointerGesture( enabled = true, onSwipeForward = { /* onSwipeForward */ }, onSwipeBackward = { /* onSwipeBackward */ }, onClick = { /* onClick */ }, ) .focusTarget() ) { // App() } }
Kodla ilgili önemli noktalar
onIndirectPointerGestureodaklanmayı gerektirir. Bu nedenle,Boxöğesinin odaklanılabilir olması içinfocusTargetde uygulanır.focusTargetveyasurfacegibi başka bir odaklanmayı sağlayan değiştiriciyi 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 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ğırmayı boş da bırakabilirsiniz. -