2016-06-27 13 views
0

Der Marker besitzt eine Symboleigenschaft und enthält ein Bitmap des Facebook-Profilbilds des Benutzers. Ich bin nicht wirklich sicher, warum der erste Marker nicht geladen wird. Aber wenn du ein zweites, drittes oder viertes postest (usw.), funktioniert das ganz gut!Der erste GoogleMaps-Marker wird nicht angezeigt, der zweite jedoch

Ich habe keine anderen Markierungen in meinem Code als den unten stehenden Code hinzugefügt.

EDIT: Dies ist wichtig. Der "Bitmap" -Wert scheint beim ersten Versuch null zu sein. So scheint es, die if-Anweisung mit der Bedingung ‚Bitmap! = Null‘ ist es zu kontrollieren und es zu veröffentlichen die erste Markierung zu verhindern ...

static Bitmap bitmap = null; 
private Target loadtarget; 
globalMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 
     @Override 
     public void onMapLongClick(LatLng point) { 
      vibe.vibrate(100); 
      AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
      MarkerOptions marker = new MarkerOptions().position(
        new LatLng(point.latitude, point.longitude)) 
        .title("New Marker"); 
      Log.e("TAG", accessToken.getUserId()); 

      String imageURL = new String("https://graph.facebook.com/" + accessToken.getUserId() + "/picture?type=small"); 
      loadBitmap(imageURL); 

      if(bitmap!=null) { 
       globalMap.addMarker(marker 
         .position(point) 
         .icon(BitmapDescriptorFactory.fromBitmap(bitmap)) 
         .anchor(0.5f, 1)); 
      } 

     } 
    }); 
} 

public void loadBitmap(String url) { 
    if (loadtarget == null) loadtarget = new Target() { 
     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
      // do something with the Bitmap 
      handleLoadedBitmap(bitmap); 
     } 

     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 

     } 

     @Override 
     public void onPrepareLoad(Drawable placeHolderDrawable) { 

     } 

    }; 

    Picasso.with(getActivity()).load(url).into(loadtarget); 
} 

public void handleLoadedBitmap(Bitmap b) { 
    bitmap = b; 
} 

Antwort

0

Sie haben Recht, bitmap ist beim ersten langen Klick null, weil keine Zeit zum Laden der Bitmap vorhanden ist. Sie rufen load() auf und versuchen unmittelbar danach Bitmap zu zeigen.

Sie können Bitmap nicht in den Long-Click-Listener laden, sondern können sich an derselben Stelle befinden, an der Sie den Listener setzen.

String imageURL = new String("https://graph.facebook.com/" + accessToken.getUserId() + "/picture?type=small"); 
loadBitmap(imageURL); 

globalMap.setOnMapLongClickListener(
    // ... 
    // the same code without imageURL initialization and bitmap loading 
); 
0

Folgen Sie der Documentation

static Bitmap bitmap = null; 
private Target loadtarget; 

globalMap.setOnMapLoadedCallback(new OnMapLoadedCallback() { 
     @Override 
     public void onMapLoaded() { 

      globalMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 
     @Override 
     public void onMapLongClick(LatLng point) { 
      vibe.vibrate(100); 
      AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
      MarkerOptions marker = new MarkerOptions().position(
        new LatLng(point.latitude, point.longitude)) 
        .title("New Marker"); 
      Log.e("TAG", accessToken.getUserId()); 

      String imageURL = new String("https://graph.facebook.com/" + accessToken.getUserId() + "/picture?type=small"); 
      loadBitmap(imageURL); 

      if(bitmap!=null) { 
       globalMap.addMarker(marker 
         .position(point) 
         .icon(BitmapDescriptorFactory.fromBitmap(bitmap)) 
         .anchor(0.5f, 1)); 
      } 

     } 
    }); 
     } 
    }); 



    public void loadBitmap(String url) { 
    if (loadtarget == null) loadtarget = new Target() { 
     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
      // do something with the Bitmap 
      handleLoadedBitmap(bitmap); 
     } 

     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 

     } 

     @Override 
     public void onPrepareLoad(Drawable placeHolderDrawable) { 

     } 

    }; 

    Picasso.with(getActivity()).load(url).into(loadtarget); 
} 

public void handleLoadedBitmap(Bitmap b) { 
    bitmap = b; 
} 
+0

Nichts hat sich geändert, es überspringt immer noch den ersten Marker. – SaltySea

0

Ich fand heraus, warum es nicht beim ersten Versuch posten. Weil ich meine Methode loadBitmap (..) zu spät aufgerufen habe, hatte ich das Gefühl, dass das Abrufen des Bildes und das Laden in den Zielwert zu lang für den clickListener war, der den Marker sofort platziert. Ich habe einfach angenommen, dass ich es früher in meiner Methode onMapReady() aufgerufen habe, und das hat den Job gemacht.

Verwandte Themen