Jan*_*Jan 6 android google-maps google-maps-markers google-maps-android-api-2
我正在开发一个适用于平板电脑的Android应用,该应用在master-detail-layout中显示了两个带有标记的地图。
两种地图都包含不同的标记。当我开始在其中一张地图中移动相机时,另一张地图上的标记开始跳跃/闪烁,有时甚至停留在错误的位置。
我 只需将标记添加到两个地图中,就可以重现google-maps android-samples的问题,仅此而已。闪烁实际上远比gif中可见。
为完整起见,这是整个更改后的活动:
public class MultiMapDemoActivity extends AppCompatActivity {
private static final LatLng BRISBANE = new LatLng(-27.47093, 153.0235);
private static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298);
private static final LatLng SYDNEY = new LatLng(-33.87365, 151.20689);
private static final LatLng ADELAIDE = new LatLng(-34.92873, 138.59995);
private static final LatLng PERTH = new LatLng(-31.952854, 115.857342);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.multimap_demo);
final SupportMapFragment firstMapFragment =
(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map1);
firstMapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
addMarkers(googleMap, multiplyMarkerPosition(BRISBANE));
addMarkers(googleMap, multiplyMarkerPosition(MELBOURNE));
addMarkers(googleMap, multiplyMarkerPosition(SYDNEY));
addMarkers(googleMap, multiplyMarkerPosition(ADELAIDE));
addMarkers(googleMap, multiplyMarkerPosition(PERTH));
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ADELAIDE, 4f));
}
});
final SupportMapFragment secondMapFragment =
(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map2);
secondMapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
addMarkersBlue(googleMap, multiplyMarkerPosition(new LatLng(51.51, 0)));
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.51, 0), 4f));
}
});
}
public List<LatLng> multiplyMarkerPosition(LatLng position) {
final LinkedList<LatLng> positions = new LinkedList<>();
final double latitude = position.latitude;
final double longitude = position.longitude;
final double delta = 1;
positions.add(new LatLng(latitude, longitude + delta));
positions.add(new LatLng(latitude, longitude - delta));
positions.add(new LatLng(latitude, longitude));
positions.add(new LatLng(latitude - delta, longitude + delta));
positions.add(new LatLng(latitude - delta, longitude - delta));
positions.add(new LatLng(latitude - delta, longitude));
positions.add(new LatLng(latitude + delta, longitude + delta));
positions.add(new LatLng(latitude + delta, longitude - delta));
positions.add(new LatLng(latitude + delta, longitude));
return positions;
}
public void addMarkers(GoogleMap map, List<LatLng> positions) {
for (LatLng latLng : positions) {
map.addMarker(new MarkerOptions().position(latLng));
}
}
public void addMarkersBlue(GoogleMap map, List<LatLng> positions) {
for (LatLng latLng : positions) {
map.addMarker(
new MarkerOptions()
.position(latLng)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
}
}
}
Run Code Online (Sandbox Code Playgroud)
我找不到这是已知的错误还是不受支持的操作模式。如果您有任何想法或可能的解决方法,请告诉我。谢谢。
| 归档时间: |
|
| 查看次数: |
988 次 |
| 最近记录: |