美文网首页
UI 06: onTouch 源码分析

UI 06: onTouch 源码分析

作者: xqiiitan | 来源:发表于2024-06-05 15:46 被阅读0次

4.onTouch 源码分析,【控件的 事件分发】。

父布局 不断分发事件给 子布局-

ViewGroup::dispatchTouchEvent()。
--> dispatchTransformedTouchEvent(ev, false, child, idBitsToAssign)
--> child.dispatchTouchEvent(event)
    View::dispatchTouchEvent(e)
    View::onTouchEvent(e) // 覆写的方法

// 当 自定义类的onTouchEvent 返回false。

if(!result && onTouchEvent(event)) {
    result = true;
}
进而导致ViewGroup:: addTouchTarget()不会执行, 它里面的 mFirstTouchTarget 不会被赋值 是null。
final boolean intercepted;
if(actionMasked == MotionEvent.ACTION_DOWN || mFirstTouchTarget != null) {
    ...
} else {
    // 当move事件进来的时候。
    intercepted = true;
}
// 拦截变成 intercepted = true。
if(!canceled && !intercepted) { // 整体是false。
    // 导致 dispatchTransformedTouchEvent(ev, false, child, idBitsToAssign) 不会得到调用。
    // move 事件不会分发, View.dispatchTouchEvent() 执行不到。
    // 进而导致View.onTouchEvent()   执行不到。
    // Move事件  进不来。
}

// 当 自定义类的onTouchEvent 返回true。

mFirstTouchTarget 不为空,
intercepted 的值就是false。
if(!canceled && !intercepted) { // 整体是true。
    dispatchTransformedTouchEvent(ev, false, child, idBitsToAssign) 会得到调用。
    //  move 事件继续分发,View.dispatchTouchEvent() 执行
    //  进而执行 View.onTouchEvent()
    //  进入处理move事件的逻辑。
}

相关文章

网友评论

      本文标题:UI 06: onTouch 源码分析

      本文链接:https://www.haomeiwen.com/subject/ksdyqjtx.html