Android: Kullanıcının düğme bölgesinin dışına dokunduğunda ve sürüklendiğinde algılanır mı? | tutuappapks.com
Android'de, bir kullanıcının bu düğmeye dokunup bu düğmenin dışına çıkıp çıkmadığını nasıl algılayabiliriz?
MotionEvent.MOVE_OUTSIDE öğesini kontrol edin: MotionEvent.MOVE kontrol edin:
NOT: Android 4.0'ı hedeflemek istiyorsanız, tümüyle yeni olasılıklar dünyası açılır: http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_HOVER_ENTER
Üzgünüm ama işe yaramıyor. Sadece ACTION_UP, ACTION_DOWN ve ACTION_MOVE, ancak ACTION_OUTSIDE değerini yakalayamıyorum. - anticafe
API Seviye 3'ten itibaren kullanılabilir: developer.android.com/reference/android/view/... - Entreco
Bu cevaba göre (stackoverflow.com/questions/6162497/...) Sadece bir dokunuşun bir Etkinlik değil, bir görünüm olup olmadığını algılamak için ACTION_OUTSIDE özelliğini kullanabileceğimize inanıyorum. - anticafe
Haklısın! Cevabımı değiştirdim - Entreco
Kökte konumlandırılmayan bireysel görünümler için bu çalışmayı yapmak için rect.contains testinin güncellenmesi için FrostRocket'ın yanıtına bakın. - Dan J
Entreco'nun gönderdiği cevap, benim durumumda biraz hafifçe düzeltmeye ihtiyaç duyuyordu. Yedeklemek zorundaydım:
Çünkü event.getX() ve event.getY() Sadece ekranın tamamını değil, sadece ImageView'a uygulanır.
+1 teşekkürler, bu daha evrensel yaklaşım ve özel görünüm uygulamalarında da çalışıyor - Knickedi
OnTouch'ımda biraz giriş ekledim ve öğrendim. MotionEvent.ACTION_CANCEL vuruluyordu. Bu benim için yeterince iyi ...
Sen bir MotionEvent.ACTION_CANCEL eğer geri çağırma View bir ebeveynin içinde bulunur ViewGroup sevmek ScrollView Çocuklarının dokunuşlarını çalmakla ilgileniyor ancak başka bir şekilde almanıza gerek yok. MotionEvent.ACTION_CANCEL içinde geri arama View. - Adil Hussain
En iyi 2 cevap, görünümde bir kaydırma görünümü dışındadır: parmağınızı hareket ettirdiğinizde kaydırma işlemi gerçekleştiğinde, hala bir hareket olayı olarak kaydedilir, ancak bir MotionEvent.ACTION_MOVE olayı olarak değil. Bu nedenle, cevabı iyileştirmek için (yalnızca görünümünüz kaydırma öğesi içinde ise gereklidir):
Bunu Android 4.3 ve Android 4.4 sürümlerinde test ettim
Moritz'in cevabı ile ilk 2 arasında herhangi bir fark görmedim ama bu aynı zamanda cevabı için de geçerli:
Bu kodu bir RecyclerView öğesinde yer alan ve mükemmel şekilde çalışan bir düğmeyle uyguladım. Sadece yeni Rect'ten kurtulabileceğinizi söylemek istedim. ACTION_DOWN Eğer getHitRect'ten önce eklerseniz. Rect rect = yeni Rect (); getHitRect (diag); - Jose M Lechon
OP ile aynı problemi yaşadım, çünkü ne zaman bilmek istedim (1) View aşağı dokunduğunda aşağıya dokunduğunda (2) View veya (3) aşağı dokunuşun View. Basit bir uzantı oluşturmak için bu konudaki çeşitli cevapları bir araya getirdim. View.OnTouchListener (adlandırılmış SimpleTouchListener) böylece başkaları ile uğraşmak zorunda değilsiniz MotionEvent nesne. Sınıfın kaynağı bulunabilir İşte veya bu cevabın alt kısmında.
Bu sınıfı kullanmak için, sadece tek bir parametre olarak ayarlayın. View.setOnTouchListener(View.OnTouchListener) yöntem şu şekildedir:
İşte projenize ekleyebileceğiniz sınıfın kaynağı:
Bu özellikle ACTION_CANCEL olması gerektiği gibi tetiklemediğinde sorunla çalışan kişiler için harika bir yanıttır. - New Guy
@FrostRocket'ın cevabı doğruysa da, çevirilerdeki değişiklikleri hesaba katmak için view.getX () ve Y'yi kullanmalısınız:
view.isPressed kullanımları view.pointInView ve bazı dokunma eğimlerini içerir. Eğim istemezseniz, mantığı dahili olarak kopyalayın. view.pointInView (kamuya açık, ancak gizli olduğu için resmi API'nın bir parçası değildir ve herhangi bir zamanda kaybolabilir).
Subdomain.example.com, example.com tarafından okunabilecek bir çerez ayarlayabilir mi? VBA ve MS-Access'te Bang Notasyonu ve Nokta Gösterimi NotSupportedException'ı önlemek için birim sınamalarda Moq ve DbFunctions'ı nasıl kullanırım? Kod modülünü yeniden yüklemek için python yorumlayıcısını zorla Event.preventDefault () 'ı kullandıktan sonra bir olayı nasıl tetiklerim? Neden sistem () 127 hata koduyla başarısız oluyor? .Net veya dize tekrarlamak için yerleşik bir işlev var mı?