通过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)
}
}