Я новичок в разработке Android. Я пытаюсь сделать несколько полигонов. Я сделал это, но второй многоугольник начинается с конца первого многоугольника. Я перечислил вопросы, которым следовал, и изображение, которое показывает мой результат.
Многоугольник на карте
Как нарисовать многоугольник свободной руки на карте Google V2 в Android?
Мой результат
Вот мой код:
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private static final LatLng MainLocation = new LatLng(40.828070, -111.904610);
FrameLayout fram_map;
FloatingActionButton fab;
Boolean Is_MAP_Moveable = false;
Projection projection;
public double latitude;
public double longitude;
PolygonOptions rectOptions;
ArrayList < LatLng > val = new ArrayList < > ();
ArrayList < ArrayList < LatLng >> val2 = new ArrayList < > ();
Polygon polygon;
String LogName = "XEL";
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
fram_map = (FrameLayout) findViewById(R.id.fram_map);
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Is_MAP_Moveable) {
Is_MAP_Moveable = false;
if (val2.isEmpty()) {
val2.add(0, val);
} else {
val2.add(val2.size(), val);
}
} else {
Is_MAP_Moveable = true;
}
}
});
fram_map.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (Is_MAP_Moveable) {
float x = event.getX();
float y = event.getY();
int x_co = Math.round(x);
int y_co = Math.round(y);
projection = mMap.getProjection();
Point x_y_points = new Point(x_co, y_co);
LatLng latLng = mMap.getProjection().fromScreenLocation(x_y_points);
latitude = latLng.latitude;
longitude = latLng.longitude;
int eventaction = event.getAction();
switch (eventaction) {
case MotionEvent.ACTION_DOWN:
val.add(new LatLng(latitude, longitude));
case MotionEvent.ACTION_MOVE:
val.add(new LatLng(latitude, longitude));
case MotionEvent.ACTION_UP:
Draw_Map();
break;
}
} else {
Toast.makeText(MainActivity.this, "Please start the zone", Toast.LENGTH_SHORT).show();
}
return Is_MAP_Moveable;
}
});
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setOnPolygonClickListener(new GoogleMap.OnPolygonClickListener() {
@Override
public void onPolygonClick(Polygon polygon) {
Toast.makeText(MainActivity.this, polygon.getPoints().toString(), Toast.LENGTH_SHORT).show();
}
});
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(MainLocation,
20));
}
public void Draw_Map() {
/* for (int i = 0; i < val2.size(); i++) {
rectOptions = new PolygonOptions();
rectOptions.addAll(val2.get(i));
rectOptions.strokeColor(Color.BLUE);
rectOptions.strokeWidth(7);
rectOptions.fillColor(Color.CYAN);
polygon = mMap.addPolygon(rectOptions);
polygon.setClickable(true);
}*/
rectOptions = new PolygonOptions();
rectOptions.addAll(val);
rectOptions.strokeColor(Color.BLUE);
rectOptions.strokeWidth(7);
rectOptions.fillColor(Color.CYAN);
polygon = mMap.addPolygon(rectOptions);
polygon.setClickable(true);
}
}