Android View TouchDelegate

Android View TouchDelegate

  • TouchDelegate 用于扩大某个 View 的触摸区域,将父容器指定的矩形区域内的触摸事件转发给目标 View 处理,当用户点击这块指定区域时,事件会被转发到目标 View 的 onTouchEvent 方法中处理,当然也可以通过 TouchDelegate 缩小子 View 的触摸区域
  • TouchDelegate 必须设置在目标视 View 的父容器上,而非 View 本身,一个父容器只能设置一个 TouchDelegate
  • 扩展区域的坐标是相对于父容器的,需确保计算后的区域不超出父容器边界
  • 其他方案:设置 Padding、自定义 onTouchEvent 逻辑
kotlin 复制代码
fun View.expandTouchRect(expandSize: Int) {
    val parentView = parent as View
    parentView.post {
        val rect = Rect()
        //获取目标 View 在其父视图中的当前原始边界
        getHitRect(rect)
        //扩展区域边界
        rect.left -= expandSize
        rect.top -= expandSize
        rect.right += expandSize
        rect.bottom += expandSize
        //扩展区域边界
        //rect.inset(-expandSize, -expandSize)
        //确保扩展后的矩形不会超过父视图的边界
        val parentRect = Rect()
        parentView.getHitRect(parentRect)
        val result = rect.intersect(parentRect)
        //在父容器中设置委托(代理)区域
        parentView.touchDelegate = TouchDelegate(rect, this)
    }
}
fun View.resetTouchRect() {
    val parentView = parent as View
    //通过设置空的 Rect 来恢复视图的原始触摸区域
    parentView.touchDelegate = TouchDelegate(Rect(), this)
}
相关推荐
Dovis(誓平步青云)2 小时前
家里设备越来越多,如何用一张空间地图控制灯光和温度![
android·java·前端·javascript·人工智能·电脑
晚风叙码4 小时前
MySQL 数据类型详解:从数值到字符串,一篇讲透
android·mysql·adb
传奇开心果编程5 小时前
【Compose Multiplatform 跨端开发学与练】第3课 布局与组件
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程7 小时前
【Compose Multiplatform 跨端开发学与练】第8课 资源管理与主题
android·windows·学习·ios·kotlin·web·composer
传奇开心果编程9 小时前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
传奇开心果编程9 小时前
【Compose Multiplatform 跨端开发学与练】第4课 导航与路由
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程9 小时前
【Compose Multiplatform 跨端开发学与练】第6课 状态管理与架构
android·学习·ui·ios·架构·kotlin·composer
事圆则缓9 小时前
Android AOSP 定制常见概念:源码目录、系统镜像与刷机流程
android
传奇开心果编程9 小时前
【Compose Multiplatform 跨端开发学与练】第2课 Compose 基础语法
android·windows·学习·ui·ios·kotlin·composer
supabc12310 小时前
Celium:连接 Windows、Mac、Linux 与 Android,让远程访问和设备管理更简单
android·linux·windows·macos·远程访问·网络管理·celium