我已在我的应用中实施了Google地图,并在其上添加了2个标记。
以下是:
LatLng mainUserLocation = new LatLng(Double.valueOf(currentLt), Double.valueOf(currentLn));
mMap.addMarker(new MarkerOptions().position(mainUserLocation).title("You"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(mainUserLocation))
mMap.animateCamera(CameraUpdateFactory.zoomTo(20), 2000, null);
LatLng otherPlayersLocation = new LatLng(currentLtAU, currentLnAU);
mMap.addMarker(new MarkerOptions().position(otherPlayersLocation).title(nameAU));
问题是相机正在变焦并聚焦在一个标记上而另一个标记已经消失了!
我想让两个标记或所有标记保持在视线中。怎么做到这一点?
请告诉我。
答案 0 :(得分:2)
所以这个问题已经得到解答 here ,并且没有提到它会违反良好的社区道德。
不过,在这里,我会尝试在你的背景下分解它。那么你 更好地了解您需要采取的步骤。
LatLng mainUserLocation = new LatLng(Double.valueOf(currentLt), Double.valueOf(currentLn));
LatLng otherPlayersLocation = new LatLng(currentLtAU, currentLnAU);
public void showMap() {
mMap.clear();
//Create your Markers List
List<Marker> markersList = new ArrayList<Marker>();
Marker youMarker = mMap.addMarker(new MarkerOptions().position(mainUserLocation).title("You"));
Marker playerMarker = mMap.addMarker(new MarkerOptions().position(otherPlayersLocation).title(nameAU));
//Add them to your list
markersList.add(youMarker);
markersList.add(playerMarker);
//get the latLngbuilder from the marker list
builder = new LatLngBounds.Builder();
for (Marker m : markersList) {
builder.include(m.getPosition());
}
//Bounds padding here
int padding = 50;
//Create bounds here
LatLngBounds bounds = builder.build();
//Create camera with bounds
cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
//Check map is loaded
mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
//animate camera here
mMap.animateCamera(cu);
}
});
}
因此,在您的代码中,您需要设置这样的方法,只需调用 showMap()。
希望此信息有所帮助。
答案 1 :(得分:0)
第一种方式
您应该使用CameraUpdate类(可能)执行所有程序化地图移动。
为此,首先计算所有标记的边界,如下所示:
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for each (Marker m : markers) {
builder.include(m.getPosition());
}
LatLngBounds bounds = builder.build();
然后使用工厂获取移动描述对象:CameraUpdateFactory:
int padding = 0; // offset from edges of the map in pixels
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
最后移动地图:
googleMap.moveCamera(cu);
或者如果你想要动画:
googleMap.animateCamera(cu);
另一种方式
查找所有latlongs的平均值,即
double avg_Lat = 23.521252;
double avg_Lng = 72.521252;
然后创建一个新的Latlng对象并分配它
LatLng latLng = null;
latLng = new LatLng(avg_Lat, avg_Lng);
map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 12));
它将包括所有latlngs