2012-08-28 40 views
18

Android'in dokunma olayının nasıl işlediğini anlamaya çalıştım ve biraz kafam karıştı. Dokunma olayını anladığımdan kök görünüme gönderilir ve çocuklara geçer. Fragment için bir kapsayıcı olan FrameLayout var. İlk parça görünümü ScrollView, ikincisi bir çeşit Gallery (HorizontalListView) ve sonuncusu da FrameLayout. Her zaman düzende sadece bir parça. Yapmak istediğim, uygulama kullanımı için ekrandaki kullanıcı parmaklarını tanımlamaktır. Swipes'ı saymak ve bir miktar swipe sonra bir şeyler yapmak istiyorum. OnTouch olayını ebeveyn tarafından yakalayın, işleyin ve çocuklara iletin

Üst FrameLayout bir OnTouchListener koymak için çalıştı ama çocuk ScrollView veya Gallery olduğunda adlı değil. onTouch'un sonunda false ve true'u döndürmeye çalıştım, ancak aynı sonucu elde ediyorum - asla çağrılmadı.

Bunu nasıl yapabilirim? Sadece dokunma olaylarını "şeffaf olarak" işlemek ve onlara dokunmadığım gibi onları iletmek istiyorum.

cevap

22

Anlayışım, aslında diğer yöne doğru gitmesidir. Çocuk görüşleri, etkinliklerinin ilk olarak tetiklendiğini (tür) alır. Kökün görünümü, olayın onTouchEvent() nolu çocuğa doğru ilerlemesini sağlayan dispatchTouchEvent() adıdır ve daha sonra, doğru ya da yanlış dönüp dönmediğine bağlı olarak, üst öğenin onTouchEvent() çağrılır.

bu gibi şeyler müdahale normal bir çözüm şöyle kişinin aktivitesinde dispatchTouchEvent(MotionEvent ev) geçersiz kılmak için geçerli: Bunun için

@Override 
public boolean dispatchTouchEvent (MotionEvent ev) { 
    // Do your calcluations 
    return super.dispatchTouchEvent(ev); 
} 

dokümantasyon here olduğunu. Ayrıca, ViewGroup (FrameLayout, vb.)

+0

'da bu yöntemi geçersiz kılabileceğinizi unutmayın. 'FrameLayout' öğesini genişlettim, bahsettiğiniz yöntemi geçersiz kıldım ve 'MotionEvent' öğesini bir "GestureDetector" a gönderdim. Bütün bu konu biraz kafa karıştırıcı. Teşekkürler! – Elad92

+0

@ Elad92, bahsettiğiniz gibi bu 2d kaydırma kodunu değiştirmeme yardımcı olabilir misiniz? https://gist.github.com/LOG-TAG/0505eedccef9e00821da, MotionEvent'i bir GestureDetector_ –

+0

'a nasıl gönderebileceğimizi anlamadıysanız, bu http://stackoverflow.com/questions/26354263/catch-ontouch- event-by-custom-2d-scrollview-parent-handle-it-ve-pass-to-childr –