dialog中处理鼠标事件

来源:互联网 发布:4g网络突然变成2g了 编辑:程序博客网 时间:2024/06/06 09:21
bug背景:在dialog中,有listview,滚动鼠标滚轮,listview上下滚动,监听鼠标事件不回调;只有在listview的上下边界时才回调;窗口为dialog,15秒自动消失,有鼠标动作时会重新计时,异常--->>>延时15秒后再次点击视图中的button时,log显示空指针,显然布局被销毁的瞬间点击button导致。
研究了几天,结论是焦点抢占了;android提供了监听鼠标事件的回调函数:

onGenericMotionEvent

大致意思是说:只有当一个普通的移动事件没有被dialog中的任何view处理、消费掉时 才会回调这个方法;

dispatchGenericMotionEvent


当处理一般的鼠标动作事件时就会回调此方法。

在他们被分派到窗体之前,我们可以重写这个回调方法来拦截所有的鼠标事件;一定要调用这个鼠标移动事件的实现才能确保事件被正常处理。

另外,我们再进入到上图中的方法体重的一个方法:superDispatchGenericMotionEvent


被自定义视图所回调,如dialog,将鼠标基本动作事件进一步传递到视图层。应用开发人员不需要调用这个方法。。 难道我不是应用开发者了? 

现在我的视图就是处在dialog环境中,而且其中又有listview控件,所以不能用onGenericMotionEvent,必须要先拦截鼠标事件而后进行操作,即调用dispatchGenericMotionEvent。


类比下:touch事件  与genericMotionEvent事件的分发路径

此图是之前画过的,为了分析view视图中焦点传递路径;现在将鼠标事件一同加以类比,如出一辙。


0 0
原创粉丝点击