当前位置: 首页 > 知识库问答 >
问题:

谷歌地图加载缓慢的内部片段

单于高逸
2023-03-14

我的主要活动是片段,其中一个片段是Map Fragment。现在,当我点击那里时,每次它都会慢慢打开。我正在使用fragment的单例实例,但它仍然不能像预期的那样工作。下面是这门课的一个好例子:

    public MapsFragment() {
            gson = new Gson();
        }

        public static MapsFragment getInstance() {
            if (mInstance == null)
                mInstance = new MapsFragment();
            return mInstance;
        }    


        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable final Bundle savedInstanceState) {
            final View v = inflater.inflate(R.layout.fragment_maps, container, false);
            mOnSavedinstance = savedInstanceState;
            mMapView = (MapView) v.findViewById(R.id.map);
            mMapWrapperLayout = (MapWrapperLayout) v.findViewById(R.id.map_relative_layout);
            mMapView.getMapAsync(MapsFragment.this);
            mMapView.onCreate(savedInstanceState);
            mMapView.requestFocus();
            MapsInitializer.initialize(getActivity());
            return v;
        }

 @Override
    public void onMapReady(GoogleMap googleMap) {
        mGoogleMap = googleMap;

        // MapWrapperLayout initialization
        // 39 - default marker height
        // 20 - offset between the default InfoWindow bottom edge and it's content bottom edge
        mMapWrapperLayout.init(mGoogleMap, Constants.MARKER_HEIGHT);

        if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            mGoogleMap.setMyLocationEnabled(false);
        }
        mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            setUpMap();

    }

 private void setUpMap() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                final ArrayList<MarkerOptions> markerOptionses = new ArrayList<MarkerOptions>();
                int counter = 0;
                for (final Places places : Model.getInstance().getPlaces()) {
                    LatLng location = new LatLng(Double.parseDouble(places.getLat()), Double.parseDouble(places.getLon()));
                    final MarkerOptions options = new MarkerOptions();
                    options.snippet(gson.toJson(places));
                    options.position(location);
                    options.title(String.valueOf(counter));
                    markerOptionses.add(options);
                    counter++;
                }
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        for (MarkerOptions markerOptionse : markerOptionses) {
                            mGoogleMap.addMarker(markerOptionse).setIcon(BitmapDescriptorFactory.fromResource(Model.getInstance().getPlaces()
                                    .get(Integer.parseInt(markerOptionse.getTitle())).getMapsRes(getActivity())));
                        }
                    }
                });


                final CameraPosition cameraPosition = new CameraPosition.Builder()
                        .target(new LatLng(45.4654, 9.1859))      // Sets the center of the map to location user
                        .zoom(Constants.CAMERA_ZOOM_LOCATION)          // Sets the zoom
                        .build();                   // Creates a CameraPosition from the builder

                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mGoogleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
                        mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                        mGoogleMap.setOnMapClickListener(MapsFragment.this);
//                            mGoogleMap.setOnInfoWindowClickListener(mInfoListener);
                    }
                });
            }
        }).start();
    }

 @Override
    public void onResume() {
        mMapView.onResume();
        super.onResume();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mGoogleMap.clear();
        mMapView.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mMapView.onLowMemory();
    }

共有1个答案

双元魁
2023-03-14

只有当标记可见时,才能尝试添加标记?我的意思是:首先将相机移动到起始位置,设置zoomLevel,然后添加标记,但前提是它位于可见区域。并在摄像机移动时更新标记。

 类似资料:
  • 我在我的嵌套scrollview中有recyckerview,当我的recrenegerview加载时,我对滚动没有问题,它非常平滑,但它的加载速度非常慢(它不是关于我的数据或网络)慢行是 当我从nestedscrollview(根元素的第一个子元素)中移动回收器视图时,它真的很快。这是我的xml 对于这个xml,它阻塞ui 3-4秒并加载它,但是如果我将recyclerview放在nesteds

  • 我是xamarin的新手,我需要在应用程序中放置谷歌地图。 我已经从xamarin下载了示例: https://github.com/xamarin/monodroid-samples/tree/master/MapsAndLocationDemo_v2 经过一些改变,它工作了,这个项目显示地图。 以下是工作的项目的代码: /MainActivity.cs/ /BasicDemo.axml/ /A

  • 我有一个片段,它是Viewpager的一部分,我想在片段中使用Google Map V2。这就是我到目前为止所尝试的, 在我的片段中, 在我的布局子片段信息中。xml,我有, 我现在能看到地图了。但是标记没有显示出来。我认为我的谷歌地图mMapView是空的。请帮我解决这个问题。提前感谢。

  • 我一直在阅读GoogleMapsJSAPI的文档,我无法理解这一点。我想将geojson文件加载到地图,以便它可以显示所有标记,但在文档(如下所示)中,它使用url。除了使用本地文件(使用我自己的geojson)之外,我如何做同样的事情? 这是GoogleAPI文档 这是我的geojson。根据控制台,错误出现在“类型”:“FeatureCollection”(the):) 控制台错误 控制台错误

  • 我有问题加载一个谷歌地图在我的片段。一切都从一个循环器视图适配器开始,该适配器启动活动“ViatGedetAllViewActivity”: 这是我的DetallViewActivity: =2 03-24 02:55:53.881 639-7362/com.example.usuari.MyApplication3 w/ResourcesManager:GetTopleVelResources:

  • 我试图在另一个片段中显示一个谷歌地图片段,但是我不能操纵地图,我已经把我看到的所有步骤都留档了,但是我不能操纵我的地图。 XML代码: 类片段代码: 主要活动类别代码: } 在调用getMapAsync()后,编辑以下堆栈跟踪: 空指针错误: 12-18 19:51:50.056 11265-11265/ar.com.taxiexpress.taxiexpressE/AndroidRuntime: