Android事件分發機制2--自定義事件分發流
阿新 • • 發佈:2018-12-12
還記得第一篇文章我們要解決的問題嗎?
java.lang.IllegalArgumentException
Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter e1
或許你腦子裡已經有完整的思路了,沒錯就是在ScrollView的onIntercepte中進行攔截,方法思路為
- 當MouseDown的時候記錄當前點選滑鼠的X和Y座標
- 如果這個時候產生了MouseMove再次獲取滑鼠的X和Y座標和之前記錄的進行對比,如果發生了變化就判定這是一個拖動過程,果斷返回True進行攔截不需要View進行處理了。
override fun onInterceptTouchEvent(ev: MotionEvent):Boolean { when(ev.action) { MotionEvent.ACTION_DOWN->{ startDownX = ev.rawX; startDownY = ev.rawY; } MotionEvent.ACTION_MOVE->{ //如果產生了移動 if(startDownX!= ev.rawX || startDownY!=ev.y) { return true; } } MotionEvent.ACTION_UP->{} MotionEvent.ACTION_CANCEL->{} } return super.onInterceptTouchEvent(ev); }
重新執行程式沒問題了哦,掌握以後這下可以輕鬆完美的解決各種事件衝突了。