我在我的Android项目中使用Kotlin。MapView是在片段中。
当用户选择多边形时,我会改变其笔划颜色。问题是有时onPolygonClick方法会检测到不同的多边形。你可以在这个GIF中看到它:https://gyazo.com/167aed90529031df01c07d7f583f790e
onPolygonClick方法:
override fun onPolygonClick(polygon: Polygon?) {
polygons.forEach {
it.strokeColor = Color.BLACK
}
polygon?.strokeColor = Color.WHITE
}
首先,我从服务器获取六边形,然后在Map上绘制它。这是在获取数据后调用的方法,用于将多边形添加到Map:
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()
}
1条答案
按热度按时间ss2ws0br1#
我没有弄清楚为什么MapView检测不同的多边形,但我想出了一个解决办法。
如果你有和我一样的问题,只需将你的多边形选项clickable设置为false(否则,如果你点击多边形,onMapClick将不起作用),设置onMapClickListener并检测哪个多边形被点击: