2016-10-31 2 views
0

조각이있는 주요 활동이 있으며 조각 중 하나가지도 조각입니다. 자, 내가 거기를 가볍게 칠 때마다 천천히 열립니다. 조각의 싱글 톤 인스턴스를 사용하고 있지만 여전히 예상대로 작동하지 않습니다. 다음은 해당 클래스의 장점입니다.Google지도로드 중 조각이 느림

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

답변

0

표시 할 수있는 경우에만 마커를 추가 할 수 있습니까? 우선, 카메라를 처음 위치로 이동하고 zoomLevel을 설정하고 그 직후에 Marker를 추가합니다. 그러나 표시되는 섹터에있는 경우에만 수행하십시오. 그리고 카메라 이동 마커를 업데이트하십시오.

관련 문제