Я использую Kotlin в моем Android проекте. MapView фрагментарно.
Когда пользователь выбирает полигон, я меняю его цвет обводки. Проблема в том, что иногда метод onPolygonClick обнаруживает разные полигоны. Вы можете увидеть это в GIF: https://gyazo.com/167aed90529031df01c07d7f583f790e
onPolygonClick метод:
override fun onPolygonClick(polygon: Polygon?) {
polygons.forEach {
it.strokeColor = Color.BLACK
}
polygon?.strokeColor = Color.WHITE
}
Сначала я получаю шестиугольники с сервера и тогда я рисую это на карте. Этот метод вызывается после того, как данные извлекаются для добавления полигонов на карту:
private fun drawRegion(regions: Array<Kraj>) {
//reset map
googleMap.clear()
polygons = ArrayList()
setMapViewBounds(regions)
for (region in regions) {
val rnd = Random()
val color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256))
for (hexagon in region.hexagons) {
val options = PolygonOptions()
for (point in hexagon) {
options.add(point)
}
options.strokeColor(Color.BLACK)
options.fillColor(color)
options.strokeWidth(2.5.toFloat())
options.clickable(true)
val pol = googleMap.addPolygon(options)
pol.tag = region.id
polygons.add(pol)
}
}
}
Как видите, я также сохраняю все полигоны в массив полигонов, чтобы получить доступ ко всем их в методе onPolygonClick.
Метод onMapReady:
override fun onMapReady(map: GoogleMap?) {
map?.let {
googleMap = it
googleMap.setMapStyle(
MapStyleOptions.loadRawResourceStyle(
activity?.applicationContext, R.raw.empty_map_style
)
)
}
map?.setOnMapClickListener(this)
map?.setOnPolygonClickListener(this)
addObservers()
}