触摸反馈的原理

2021-04-16  本文已影响0人  王灵

本文要叙述的是触摸事件在各种情况下的传递路径及逻辑

一、3个最基本的相关函数

在一个viewGroup中当事件传递到dispatchTouchEvent函数的时候,它会先调用自己的onInterceptTouchEvent函数,询问自己是否需要拦截这个事件。如果拦截则将事件交给自己的onTouchEvent去处理并返回处理结果;如果不拦截,则会将事件通过调用子view的dispatchTouchEvent传递给子view,判断返回值,如果是false还是要交给自己的onTouchEvent
viewGroup的dispatchTouchEvent

//只是大概这个意思,实际不是这么写的
    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        if (onInterceptHoverEvent(ev)) {
            return onTouchEvent(ev)
        } else if (子view的dispatchTouchEvent) {
            return true
        } else {
            return onTouchEvent(ev)
        }
    }

view的dispatchTouchEvent

//只是大概这个意思,实际不是这么写的
    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        return onTouchEvent(ev)
    }

二、viewGroup的触摸拦截

onInterceptTouchEvent不用在第一时间就返回true,而是在任意事件里需要拦截的时候返回true即可。不过需要做好拦截之后工作的准备。
与之相关的还有一个函数parent.requestDisallowInterceptTouchEvent(true)在子view不希望父view及祖先view执行的时候调用

上一篇 下一篇

猜你喜欢

热点阅读