将点添加到多边形会在Google Maps Android中生成星形

将点添加到多边形会在Google Maps Android中生成星形,android,google-maps-android-api-2,Android,Google Maps Android Api 2,我尝试在Android中创建一个闭合多边形,如果用户触摸屏幕并向多边形添加新点,该多边形将展开。但是我得到的不是一个区域,而是一个以第一个坐标为中心点的星形 我使用了以下代码: @Override public void onMapClick(LatLng latLng) { googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); //Toast.makeText(this,latLng.toStr

我尝试在Android中创建一个闭合多边形,如果用户触摸屏幕并向多边形添加新点,该多边形将展开。但是我得到的不是一个区域,而是一个以第一个坐标为中心点的星形

我使用了以下代码:

@Override
  public void onMapClick(LatLng latLng)
  {

    googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
    //Toast.makeText(this,latLng.toString(),Toast.LENGTH_SHORT).show();
    if(shape==null)
    {
      shape=googleMap.addPolygon(new PolygonOptions()
              .add(latLng)
 .strokeColor(Color.RED));
      //line.setGeodesic(true);
    }
    else
    {
      List<LatLng> points=shape.getPoints();
      points.add(latLng);
      shape.setPoints(points);
    }
  }
@覆盖
公共无效的点击(LatLng LatLng)
{
googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
//Toast.makeText(this,latLng.toString(),Toast.LENGTH_SHORT).show();
if(shape==null)
{
shape=googleMap.addPolygon(新PolygonOptions()
.添加(板条)
.strokeColor(Color.RED));
//测地线(真);
}
其他的
{
列表点=shape.getPoints();
点。添加(latLng);
形状。设定点(点);
}
}

我应该更改什么?

问题在于自动关闭功能。它会自动添加第一个坐标以使多边形闭合

在这里,您可以看到每次单击如何添加点:

01-25 18:48:59.976  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:04.367  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ -------------------
01-25 18:49:04.367  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:04.375  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (16.29905262358862,-38.32033362239599)
01-25 18:49:09.312  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ -------------------
01-25 18:49:09.312  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:09.312  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (16.29905262358862,-38.32033362239599)
01-25 18:49:09.312  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:09.312  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (26.115986226379576,-1.0547062754631042)
01-25 18:49:12.421  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ -------------------
01-25 18:49:12.421  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:12.421  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (16.29905262358862,-38.32033362239599)
01-25 18:49:12.421  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:12.421  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (26.115986226379576,-1.0547062754631042)
01-25 18:49:12.421  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:12.421  12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-25.79989178579966,15.46873524785042)
因此,如果要创建动态多边形,请通过添加以下直线删除自动添加的点:

 if(points.size()>2)
      points.remove(points.size()-2);

您可以对代码进行以下更改:

 void addNewPointtoPolygon(LatLng point,Polygon plg){
    List<LatLng> lll = plg.getPoints();
    if (lll.size() < 2)
        lll.add(point);
    else lll.add(lll.size() - 1, point);
    plg.setPoints(lll);
}
void addNewPointtoPolygon(板条点,多边形plg){
List lll=plg.getPoints();
如果(lll.size()<2)
补充(点);
else lll.add(lll.size()-1,点);
plg.设定点(lll);
}

这太难看了。它们应该返回与通过设置点发送的数组完全相同的数组。我修改点列表,然后通过设置点进行设置。如果这是丑陋的,你将如何防止开始形状?我的意思是API所做的是丑陋的/不直观的。它不应该修改您发送给它的列表。顺便说一句,你可能想接受你的答案。我同意MaciejGorski的观点,那不是一个功能,那是一个错误/糟糕的设计。我在这里报道过:请随意主演。。。