1. 程式人生 > >Android事件分發機制2--自定義事件分發流

Android事件分發機制2--自定義事件分發流

還記得第一篇文章我們要解決的問題嗎?

java.lang.IllegalArgumentException

Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter e1

 或許你腦子裡已經有完整的思路了,沒錯就是在ScrollView的onIntercepte中進行攔截,方法思路為

  1. 當MouseDown的時候記錄當前點選滑鼠的X和Y座標
  2. 如果這個時候產生了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);
}

 重新執行程式沒問題了哦,掌握以後這下可以輕鬆完美的解決各種事件衝突了。