Найти тему
IamAndroidDev

Задачка на Яндекс Собеседовании

Задача:
написать реализацию метода x, y координаты относительно view возвращает view (дочернюю или текущую) в который попал ползователь ?

Решение:
Для реализации метода, который возвращает дочернюю или текущую view, в которой находится пользователь в момент его касания, можно использовать рекурсивный подход. Например, вот пример реализации такого метода на языке Kotlin:

fun View?.findTouchedView(x: Float, y: Float): View? {
if (this == null) return null

// Проверяем, что касание было в пределах текущей view
val location = IntArray(2)
this.getLocationOnScreen(location)
val minX = location[0]
val maxX = minX + this.width
val minY = location[1]
val maxY = minY + this.height
if (x < minX || x > maxX || y < minY || y > maxY) {
return null
}

// Проверяем, есть ли дочерние view, в которых произошло касание
if (this is ViewGroup) {
for (i in 0 until childCount) {
val child = getChildAt(i)
val result = child.findTouchedView(x, y)
if (result != null) {
return result
}
}
}

// Если никакие дочерние view не подошли, возвращаем текущую view
return this
}

Этот метод можно вызвать на любой view, передав ему координаты x и y, и он вернет дочернюю view, в которую было сделано касание, или текущую view, если касание произошло в пределах текущей view.