Activity Touch事件分发 dispatchTouchEvent onTouchEvent

1 先了解一下  Activity 的   dispatchTouchEvent  方法

http://developer.android.com/reference/android/app/Activity.html#dispatchTouchEvent(android.view.MotionEvent)

官方解析是

public boolean dispatchTouchEvent (MotionEvent ev)
Added in  API level 1

Called to process touch screen events. You can override this to intercept all touch screen events before they are dispatched to the window. Be sure to call this implementation for touch screen events that should be handled normally.

Parameters
ev The touch screen event.
Returns
  • boolean Return true if this event was consumed.
注意这个是Activity的dispatchTouchEvent的解析

————————————————————————————————————————————

负责处理 touch screen(触屏) 事件 -- 当你触摸屏幕的时候调用该方法

可以覆盖此方法,来拦截所有的 touch screen 事件(在事件被分派到window之前)即。拦截以后将不会被分派到window中了


通俗的讲:

当触摸屏幕的时候,事件会先分派到 Activity的dispatchTouchEvent

然后。可以通过此方法 拦截消息,阻止他分派到window中

————————————————————————————————————————————

第二个注意的是:

拦截事件的时候只要不调用 super.dispatchTouchEvent 就可以。

return true 或者retuen false 都将会拦截touch screen 事件


接下来看一下 Activity中 dispatchTouchEvent的方法定义

————————————————————————————————————————————

  public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            onUserInteraction();
        }
        if (getWindow().superDispatchTouchEvent(ev)) {
            return true;
        }
        return onTouchEvent(ev);
    }

看到了吧

 如果子类Activity#dispatchTouchEvent中没有调用super.dispatchTouchEvent 将会拦截touchEvent


touch screen events 将不会 dispatch 到 window中

同时Activity的onTouchEvent也将被拦截

————————————————————————————————————————————

总结:

touch screen 事件会优先将MotionEvent 分发到Activity的dispatchTouchEvent中

然后通过调用 getWindow.dispatchTouchEvent将消息继续分发到 Activity的view中

最后会根据view的返回值(getWindow.dispatchTouchEvent()) 判断是否继续传递到Activity的onTouchEvent




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值