GoogleMap调用addPolygon添加孔洞时抛出空列表异常,但列表非空
问题原因及解决方法
哈哈,这个坑我之前也踩过!你代码里的问题其实很简单——你只给多边形加了洞,却完全没定义主多边形的顶点坐标!
Google Maps的多边形洞是依附于主多边形存在的,就像你要在一块大饼上挖个洞,总得先有这块大饼吧?你的PolygonOptions只设置了填充色和洞的坐标,却没有调用add()或者addAll()来添加主多边形的顶点,SDK自然会认为主多边形的坐标列表是空的,抛出那个看起来有点误导的异常(虽然提示写的是List<LatLng> cannot be empty,但它指的是主多边形的坐标列表,不是洞的)。
另外还有个小细节要注意:洞的坐标环绕方向最好和主多边形相反(比如主多边形用顺时针,洞就用逆时针),这样Maps才能正确识别哪个是主区域、哪个是洞,避免出现“洞变成实心区,主区变成洞”的反向问题。
给你修正后的代码示例:
// 先定义主多边形的坐标(比如一个更大的闭合区域,这里用顺时针方向) List<LatLng> mainPolygon = new ArrayList<>(); mainPolygon.add(new LatLng(-5, -5)); mainPolygon.add(new LatLng(15, -5)); mainPolygon.add(new LatLng(15, 15)); mainPolygon.add(new LatLng(-5, 15)); mainPolygon.add(new LatLng(-5, -5)); // 调整洞的坐标为逆时针方向(和主多边形方向相反) List<LatLng> holeList = new ArrayList<>(); holeList.add(new LatLng(0, 0)); holeList.add(new LatLng(0, 10)); holeList.add(new LatLng(10, 10)); holeList.add(new LatLng(10, 0)); holeList.add(new LatLng(0, 0)); // 重点:先添加主多边形,再添加洞 map.addPolygon(new PolygonOptions() .fillColor(Color.RED) .addAll(mainPolygon) // 这一步是你之前漏掉的核心! .addHole(holeList));
内容的提问来源于stack exchange,提问作者eleven
相关产品推荐
相关产品推荐

