2011-06-17 35 views
22

Özel bir TextView uygularım ve görünüm dokunduğunda bir miktar işlem yapmak istiyorum. onTouchEvent yönteminin bana setOnTouchListener kullanmadan görünümdeki tüm dokunuşları vereceğine karar verdim (tüm işimi portatif olarak faaliyet yerine görünüm içinde yapmaya çalışıyorum), ancak kayıtlı tek dokunma olayı ACTION_DOWN. Bunu kullanarak aktivitede bir OnTouchListener ayarlarsam, tüm dokunma olaylarını elde ederim, ancak onTouchEvent yapmaz.View.onTouchEvent yalnızca ACTION_DOWN olayını kaydeder

Durumun neden böyle olduğunu ya da herhangi birinin bana uygulama önerisini setOnTouchListener kullanmayan bir çözüm sunabileceğini bilen var mı? (Bu, uygulama etkinliğinin kendi dinleyicisini belirlemesini engeller)?

cevap

55

Aşağıdan aşağıya aşağıdaki olayları almak için true değerini döndürmeniz gerekir.

+1

Bunu yaparsam, etkinlikten uygulanan dokunma/tıklama dinleyicileri hiçbir zaman tetiklenmez. İşlevleri devre dışı bırakmak istemiyorum. Sadece gönderilmeden önce dokunuşları engellemek istiyorum, ama yine de onları gönderiyorum. 'DispatchTouchEvent' çağırmak tekrar 'onTouchEvent' çağırır ve bir yığın taşmasına neden olur (lol). –

+2

Bir ViewGroup kapsayıcısındaysanız, çocuğunuza gönderilen dokunma olaylarını izlemek için, ıconceptTouchEvent() öğesini geçersiz kılabilirsiniz. Bunun yanında (veya doğrudan dispatchTouchEvent için - tavsiye edilmez), ne istediğinizi yapamazsınız. MotionEvent gönderimi, doğru olanı döndüren ve ardından takip eden tüm etkinlikleri o hedefe gönderen ilk alıcı aracılığıyla bir hedef bulmaktan kaynaklanır. – hackbod

+0

Yeterince adil. Sanırım bilmem gereken şey, özel bir görünümde dokunma dinleyicisine nasıl sahip olacağınızdır, bu da uygulama sınıfının tamamen işlevsel bir dokunma dinleyicisine sahip olmasına izin vermez, ancak başlığındaki soruyu kesinlikle yanıtladınız. –