2017-10-24 13 views
0

Androidでは、animateCamera(cu)の例外があります。私は多くの例を見ました。私のコードでは何が違うのか分かりません。 誰もがアイデアを持っていますか? 北東緯度/経度::(43.6026,1.50275) 南西緯度/経度:(43.5578,1.4243)animateCameraのサイズをゼロにすることができない場合の例外

LOG: com.google.maps.api

境界は、(デバッグで見られる)、これらの値を持っています.android.lib6.common.apiexception.c:newLatLngBounds(LatLngBounds、int)を使用したときのエラー:マップサイズは0にできません。ほとんどの場合、レイアウトはマップビューでまだ​​発生していません。レイアウトが発生するまで待つか、地図の寸法を指定できるnewLatLngBounds(LatLngBounds、int、int、int)を使用してください。

{ // Draw Polyline 
      Double myLat, myLon; 
     Double myStartLat, myStartLon; 
      LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
      while (cursor.moveToNext()) { 
       try {myLat = Double.valueOf(cursor.getString(cursor.getColumnIndexOrThrow(COL_LAT)));} 
       catch (NumberFormatException e) { myLat=0.0d;} 
       try {myLon = Double.valueOf(cursor.getString(cursor.getColumnIndexOrThrow(COL_LON)));} 
       catch (NumberFormatException e) { myLon=0.0d;} 
       polyline=new LatLng(myLat,myLon); 
       polylines.add(polyline); 
       if (cursor.getPosition() == 0) { // start and end of the road 
        myStartLat=myLat; 
        myStartLon= myLon; 
        mapAddMArker(googleMap,polyline,0); // add a marker last arg = 0 = start 
       }else { 
        if (cursor.isLast()) { // start and end of the road 
         mapAddMArker(googleMap, polyline, 9); // add a marker 
        } 
       } 
       builder.include(polyline); // extends bounds to include all the road 
      } 
      PolylineOptions poly = new PolylineOptions() 
        .addAll(polylines)// https://stackoverflow.com/questions/22516015/polyline-not-visible-android-maps-api-v2 
        .color(Color.RED) 
        .width(5) 
        .visible(true) 
        .zIndex(0); // before = 30 
      googleMap.addPolyline(poly); 
      LatLngBounds bounds = builder.build(); 
      CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 0); // last argument = padding i 
      googleMap.animateCamera(cu); // EXCEPTION HERE 
     // I tried this, it works but it is not what I want to display googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(myStartLat, myStartLon), 15)); 
} 

答えて

0

ITRが他の人の回答に発見し、私のコードに適合し、これと連動し

// Cannot zoom to bounds until the map has a size. 
     final View mapView = getSupportFragmentManager().findFragmentById(R.id.map).getView(); 
     if (mapView != null) { 
      if (mapView.getViewTreeObserver().isAlive()) { 
       mapView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
        @SuppressWarnings("deprecation") // We use the new method when supported 
        @SuppressLint("NewApi") // We check which build version we are using. 
        @Override 
        public void onGlobalLayout() { 
         Log.d("$$NAV ", "onGlobalLayout"); 
         //Calculate the markers to get their position 
         if (isMapOk) { 
          LatLngBounds bounds = builder.build(); 
          googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 70)); 
         } //ongloballayout 
         else // map is not OK (no polyline) -> center // message 48°51'19.9"N 2°18'57.1"E 
         { 
          googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(48.855484, 2.315972), 0)); // "Le Penseur" of Rodin, Rodin museum in Paris 
         } 
        } 
       }); 
      }//if (mapView!=null) 
     } 
関連する問題