Android onTouchEvent中指定某一个控件之外的区域点击事件 kotlin
时间: 2024-03-16 10:41:05 浏览: 175
android 控件同时监听单击和双击实例
在 Kotlin 中,实现 Android onTouchEvent 中指定某一个控件之外的区域点击事件与 Java 中类似,可以参考以下方法:
1. 在控件的 `onTouchEvent` 方法中判断点击的位置是否在指定控件之外的区域。如果是,则处理该事件并返回 `true` 表示已经处理完毕;否则返回 `super.onTouchEvent(event)`,让事件继续向下传递。
```kotlin
override fun onTouchEvent(event: MotionEvent?): Boolean {
if (!isTouchInsideView(event, mTargetView)) {
// 处理指定控件之外的事件
return true
}
return super.onTouchEvent(event)
}
private fun isTouchInsideView(event: MotionEvent?, view: View): Boolean {
val location = IntArray(2)
view.getLocationOnScreen(location)
val x = location[0]
val y = location[1]
val width = view.width
val height = view.height
return event?.rawX ?: 0 >= x && event?.rawX ?: 0 <= x + width
&& event?.rawY ?: 0 >= y && event?.rawY ?: 0 <= y + height
}
```
2. 在自定义的 `ViewGroup` 中,重写 `onInterceptTouchEvent` 方法,根据点击的位置是否在指定控件之外的区域,判断是否需要拦截事件。如果需要拦截事件,则返回 `true`;否则返回 `super.onInterceptTouchEvent(event)`,让事件继续向下传递。
```kotlin
override fun onInterceptTouchEvent(event: MotionEvent?): Boolean {
if (!isTouchInsideView(event, mTargetView)) {
// 处理指定控件之外的事件
return true
}
return super.onInterceptTouchEvent(event)
}
private fun isTouchInsideView(event: MotionEvent?, view: View): Boolean {
val location = IntArray(2)
view.getLocationOnScreen(location)
val x = location[0]
val y = location[1]
val width = view.width
val height = view.height
return event?.rawX ?: 0 >= x && event?.rawX ?: 0 <= x + width
&& event?.rawY ?: 0 >= y && event?.rawY ?: 0 <= y + height
}
```
需要注意的是,如果您拦截了指定控件之外的区域的点击事件,可能会影响用户的体验,因此建议仅在必要时使用此功能。
阅读全文