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

时间:2016-06-10 08:51:46

标签: android google-maps google-maps-markers google-maps-android-api-2

我正在开发一款适用于平板电脑的Android应用程序,该应用程序显示了两个带有主要细节布局标记的地图。

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

我能够使用the google-maps android-samples重现问题 只需在两张地图上添加一些标记,仅此而已。实际上,闪烁实际上比在gif中看到的要糟糕得多。

gif displaying jumping markers

这里完整改变了活动的完整性:

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)));
        }
    }
}

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

0 个答案:

没有答案