通过VIew的dispatchTouchEvent(MotionEvent event)函数调用子类
WebView::OnTouchEvent(MotionEvent); 调用
WebViewClassic::onTouchEvent(MotionEvent ev) (在这里你可以做些自己想做的事情,比如if (ev.getAction() == MotionEvent.ACTION_UP) .....
之后会调用
if (mInputDispatcher.postPointerEvent(ev, getScrollX(), getScrollY() - getTitleHeight(), mZoomManager.getInvScale())) {
mInputDispatcher.dispatchUiEvents();
return true;
}
// mInputDispatcher是android4.1中新添加的WebViewInputDispatch类型的变量,专们用来处理WebView的输入事件处理
WebViewInputDispatch.java:: dispatchUiEvents() 会调用dispatchUiEvents(false) 即是:
WebViewInputDispatch.java:: dispatchUiEvents(boolean calledFromHandler) (此函数有两处被调用,一是此处,二是WebViewInputDispatch.java::
UiHandle 中的handleMessage()调用)。然后调用
dispatchUiEvent(MotionEvent event, int eventType, int flags) ,此函数调用 mUiCallbacks.dispatchUiEvent(event, eventType, flags);将事件回调至
WebViewClassic:: onHandleUiEvent(MotionEvent event, int eventType, int flags) //此函数内有我们的放大镜显示,如果
eventType==WebViewInputDispat cher.EVENT_TYPE_TOUCH,调用
WebViewClassic:: onHandleUiTouchEvent(MotionEvent ev) 调用
WebViewClassic:: handleTouchEventCommon(ev, action, Math.round(x), Math.round(y)); 进行最后的处理。
其中UiHandle 中的handleMessage()由postPointerEvent(ev, getScrollX(), getScrollY() - getTitleHeight(), mZoomManager.getInvScale())函数经过一些
步骤后调用sendMessage()