WebView Touch事件总结

来源:互联网 发布:iphone6s硬件检测软件 编辑:程序博客网 时间:2024/06/05 14:15

WebView Touch事件总结

通过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()

0 0