加载谷歌地图时收到暧昧的天空屏幕 [英] receiving ambiguous sky screen while loading google map

查看:114
本文介绍了加载谷歌地图时收到暧昧的天空屏幕的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在设备上加载谷歌地图时,我有时会在屏幕下方收到。如下图所示,它出现在第二次加载中。,否则它完全像正常的谷歌地图与路线我正在使用SupportmapFragment和获取googleMap对象。

  supportMapFragment =(SupportMapFragment)getChildFragmentManager()。findFragmentById(R.id.map_view_fragment); 

下面是在activity / fragment中显示地图的代码
$ b $ (final List< ;? extends MapHelper> position,final GoogleMap googleMap){
/ * List< MapHelper> position = new ArrayList< MapHelper>();
for(int i = lastPosition; i< maps.size(); i ++){
position.add(maps.get(i));
} * /
final LatLngBounds.Builder mapBounds = new LatLngBounds.Builder();
if(position.size()> 0&& Validator.isNotNull(googleMap)){
googleMap.clear();
列表< PolylineOptions> polylineOptionses = new ArrayList< PolylineOptions>();
PolylineOptions选项= null;
布尔lastPause = null;
for(MapHelper map:position){
if(map.isPause()){
if(Validator.isNull(lastPause)||!lastPause){
option = new PolylineOptions()。width(5).color(Color.rgb(255,0,155))。geodesic(true);
polylineOptionses.add(option);
}
mapBounds.include(new LatLng(map.getLatitude(),map.getLongitude()));
option.add(new LatLng(map.getLatitude(),map.getLongitude()));
} else {
if(Validator.isNull(lastPause)|| lastPause){
option = new PolylineOptions()。width(5).color(Color.rgb(0,179, 253))测地(真);
polylineOptionses.add(option);
}
mapBounds.include(new LatLng(map.getLatitude(),map.getLongitude()));
option.add(new LatLng(map.getLatitude(),map.getLongitude()));
}
lastPause = map.isPause();

(PolylineOptions选项:polylineOptionses){
googleMap.addPolyline(options);
}
if(Validator.isNotNull(option)){
// List< LatLng> points = option.getPoints();


googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback(){
@Override
public void onMapLoaded(){
LatLng startPoint = new LatLng(position .get(0).getLatitude(),position.get(0).getLongitude());
googleMap.addMarker(new MarkerOptions()。position(startPoint).title(start)。icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
mapBounds.include(startPoint);
LatLng endPoint = new LatLng(position.get(position.size() - 1).getLatitude(),position。 get(position.size() - 1).getLongitude());
mapBounds.include(endPoint);
googleMap.addMarker(new MarkerOptions()。position(endPoint).title(finish ).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
googleMap。 setPadding(15,205,10,110);
googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(mapBounds.build(),0));
//googleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(mapBounds.build(),10));
googleMap.moveCamera(CameraUpdateFactory.zoomOut());

}
});
}




$ b supportMapFragment.getMapAsync(new OnMapReadyCallback(){
@Override
public void onMapReady(GoogleMap googleMap){
if(Validator.isNotNull(googleMap)){
googleMap.setMyLocationEnabled(false);
googleMap.clear();
googleMap.setOnMapClickListener (new GoogleMap.OnMapClickListener(){
@Override
public void onMapClick(LatLng latLng){
if(activity.preferences.isSaveScreen()){
facebook.setChecked(false );
twitter.setChecked(false);
activity.replaceFragment(new FullMapFragment(),null);
}
if(!activity.preferences.isSaveScreen()){
activity.preferences.setHistoryScreen(真);
activity.replaceFragment(new FullMapFragment(),null);
}
}
});
if(gps){
nonGpsSummary.setVisibility(View.GONE);
列表< HistoryMap> historyMaps = new ArrayList< HistoryMap>();
if(Validator.isNotNull(activity.preferences.getUserHistory()。getHistoryMaps())){
historyMaps.addAll(Arrays.asList(activity.preferences.getUserHistory()。getHistoryMaps())); ();
}
if(historyMaps.size()> 0){
if(Validator.isNotNull(googleMap)){
drawRouteIntoMap(historyMaps,googleMap);
}
} else {
mapFrame.setVisibility(View.GONE);
}
} else {
gpsSummary.setVisibility(View.GONE);
}
}
}
});

这个问题与放大特定路线谷歌地图
通过使用我得到适当的路线mapbounds,但我不明白为什么这个屏幕显示。

我没有收到cordinates 0.0我调试,API密钥

解决方案

您要调用两次 moveCamera 。第一个试图移动相机,但第二个不会等待第一个结束并执行缩小。



这可能不会一直发生并可能在不同的设备上表现不同。

最好的选择是在你的 CameraUpdateFactory.newLatLngBounds(mapBounds.build(),0 )而不是0


while loading google map on device i am receiving below screen sometimes.it comes on second load as shown below. otherwise it comes perfectly as normal google map with route I am using SupportmapFragment and get googleMap object as.

 supportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map_view_fragment);

below is code for displaying map in activity/fragment

public static void drawRouteIntoMap(final List<? extends MapHelper> position, final GoogleMap googleMap) {
        /*List<MapHelper> position = new ArrayList<MapHelper>();
        for (int i = lastPosition; i < maps.size(); i++) {
            position.add(maps.get(i));
        }*/
        final LatLngBounds.Builder mapBounds = new LatLngBounds.Builder();
        if (position.size() > 0 && Validator.isNotNull(googleMap)) {
            googleMap.clear();
            List<PolylineOptions> polylineOptionses = new ArrayList<PolylineOptions>();
            PolylineOptions option = null;
            Boolean lastPause = null;
            for (MapHelper map : position) {
                if (map.isPause()) {
                    if (Validator.isNull(lastPause) || !lastPause) {
                        option = new PolylineOptions().width(5).color(Color.rgb(255, 0, 155)).geodesic(true);
                        polylineOptionses.add(option);
                    }
                    mapBounds.include(new LatLng(map.getLatitude(),map.getLongitude()));
                    option.add(new LatLng(map.getLatitude(), map.getLongitude()));
                } else {
                    if (Validator.isNull(lastPause) || lastPause) {
                        option = new PolylineOptions().width(5).color(Color.rgb(0, 179, 253)).geodesic(true);
                        polylineOptionses.add(option);
                    }
                    mapBounds.include(new LatLng(map.getLatitude(),map.getLongitude()));
                    option.add(new LatLng(map.getLatitude(), map.getLongitude()));
                }
                lastPause = map.isPause();
            }
            for (PolylineOptions options : polylineOptionses) {
                googleMap.addPolyline(options);
            }
            if(Validator.isNotNull(option)){
                //List<LatLng> points = option.getPoints();


                googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
                    @Override
                    public void onMapLoaded() {
                        LatLng startPoint = new LatLng(position.get(0).getLatitude(), position.get(0).getLongitude());
                        googleMap.addMarker(new MarkerOptions().position(startPoint).title("start").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
                        mapBounds.include(startPoint);
                        LatLng endPoint = new LatLng(position.get(position.size() - 1).getLatitude(), position.get(position.size() - 1).getLongitude());
                        mapBounds.include(endPoint);
                        googleMap.addMarker(new MarkerOptions().position(endPoint).title("finish").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                        googleMap.setPadding(15, 205, 10, 110);
                        googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(mapBounds.build(), 0));
                        //googleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(mapBounds.build(), 10));
                        googleMap.moveCamera(CameraUpdateFactory.zoomOut());

                    }
                });
            }

        }
    }


 supportMapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                if (Validator.isNotNull(googleMap)) {
                    googleMap.setMyLocationEnabled(false);
                    googleMap.clear();
                    googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
                        @Override
                        public void onMapClick(LatLng latLng) {
                            if (activity.preferences.isSaveScreen()) {
                                facebook.setChecked(false);
                                twitter.setChecked(false);
                                activity.replaceFragment(new FullMapFragment(), null);
                            }
                            if (!activity.preferences.isSaveScreen()) {
                                activity.preferences.setHistoryScreen(true);
                                activity.replaceFragment(new FullMapFragment(), null);
                            }
                        }
                    });
                    if (gps) {
                        nonGpsSummary.setVisibility(View.GONE);
                        List<HistoryMap> historyMaps = new ArrayList<HistoryMap>();
                        if (Validator.isNotNull(activity.preferences.getUserHistory().getHistoryMaps())) {
                            historyMaps.addAll(Arrays.asList(activity.preferences.getUserHistory().getHistoryMaps()));
                        }
                        if (historyMaps.size() > 0) {
                            if (Validator.isNotNull(googleMap)) {
                              drawRouteIntoMap(historyMaps, googleMap);
                            }
                        } else {
                            mapFrame.setVisibility(View.GONE);
                        }
                    } else {
                        gpsSummary.setVisibility(View.GONE);
                    }
                }
            }
        });

this question is in relation with zoom over specific route google map. by using that i get proper route with mapbounds but i m not getting why this screen is displaying.

i am not receiving cordinates 0.0 i debug that,api key is also proper.

解决方案

You are calling moveCamera twice. The first one tries to move the camera but the second one doesn't wait for the first one to end and performs the zoom out.

This may not happen all the times and may behave differently on different devices.

The best option is to set a padding on your CameraUpdateFactory.newLatLngBounds(mapBounds.build(), 0) instead of 0

这篇关于加载谷歌地图时收到暧昧的天空屏幕的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆