扩展子View触摸区域


通过TouchDelegate 扩展子view的触摸区域

最近学自定义view看到源码有一段

if (mTouchDelegate != null) {
    if (mTouchDelegate.onTouchEvent(event)) {
        return true;
    }
}

经过查询TouchDelegate是用来代理子View的触摸区域的
所以我们就有了下面这个方法

/**
 * 作用 扩展父view的子view的触摸区域
 *
 * @param childView 子view
 * @param leftOffset 左偏移量 单位是px
 * 以此类推
 */
fun View.expandChildTouchArea(
    childView: View,
    leftOffset: Int,
    topOffset: Int,
    rightOffset: Int,
    bottomOffset: Int,
) {
    post {
        val bounds = Rect()
        //  获取子view在父view的相对位置
        childView.getHitRect(bounds)
        bounds.left -= leftOffset
        bounds.top -= topOffset
        bounds.right += rightOffset
        bounds.bottom += bottomOffset
        //创建一个触摸代理对象 传入子view新的bounds 和 子view
        val touchDelegate = TouchDelegate(bounds,childView)
        //父view来代理子view的触摸
        setTouchDelegate(touchDelegate)
    }
}

文章作者: Lao Wu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lao Wu !
评论
  目录