一个Android活动中包含两个MapView:跳跃/闪烁标记

Jan*_*Jan 6 android google-maps google-maps-markers google-maps-android-api-2

我正在开发一个适用于平板电脑的Android应用,该应用在master-detail-layout中显示了两个带有标记的地图。

两种地图都包含不同的标记。当我开始在其中一张地图中移动相机时,另一张地图上的标记开始跳跃/闪烁,有时甚至停留在错误的位置。

我 只需将标记添加到两个地图中,就可以重现google-maps android-samples的问题,仅此而已。闪烁实际上远比gif中可见。

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)

我找不到这是已知的错误还是不受支持的操作模式。如果您有任何想法或可能的解决方法,请告诉我。谢谢。