У меня есть изображение континентов, и мне нужно, когда пользователь нажимает на изображение, чтобы определить, на каком континенте он щелкнул.
Я попытался собрать координаты xy для каждого континента, и когда пользователь нажимает на изображение, я проверяю, существует ли палец пользователя xy.в моих путях, как это:
val path = Path()
path.moveTo(409f, 1986f)
path.lineTo(414f, 1986f)
path.lineTo(418f, 1986f)
...
path.close()
val rectF = RectF()
path.computeBounds(rectF, true)
val r = Region()
r.setPath(path, Region(rectF.left.toInt(), rectF.top.toInt(), rectF.right.toInt(), rectF.bottom.toInt()))
ivMainMap?.setOnTouchListener { v, event ->
val point = Point()
point.x = event.x.toInt()
point.y = event.y.toInt()
if (r.contains(point.x, point.y)) {
Toast.makeText(this, "South America", Toast.LENGTH_LONG).show()
}
return@setOnTouchListener true
}
, но я столкнулся с проблемой с несколькими размерами экрана, после этого я попытался собрать координаты xy на экране 560 точек на дюйм и преобразовать xy в новый xy с текущей плотностью размера экрана, как это:
private fun getExactX(x: Float): Float {
val screenAdjust = Resources.getSystem().displayMetrics.densityDpi.toFloat() / 560f
return ((x) * screenAdjust)
}
private fun getExactY(y: Float): Float {
val screenAdjust = Resources.getSystem().displayMetrics.densityDpi.toFloat() / 560f
return ((y) * screenAdjust)
}
но проблема все еще существует