2017-11-03 3 views
2

Beim Hinzufügen von Markern in mapbox gibt es eine Möglichkeit, dem Marker ein benutzerdefiniertes Symbol hinzuzufügen. Ich frage mich, ob wir eine Ansicht (R.layout-Datei) aufblähen können, anstatt ein Zeichen zu setzen. HierKann ich eine Ansicht aufblasen, die das Symbol in Mapbox Android ersetzt?

ist der Code: -

public void onMapReady(MapboxMap mapboxMap) { 
       IconFactory iconFactory=IconFactory.getInstance(context); 
       for(int i=0;i<coordinates.size();i++){ 
        mapboxMap.addMarker(new MarkerOptions() 
        .position(new LatLng(lat,longt)) 
        .icon(iconFactory.fromResource(R.drawable.ic_location_green)) 
          //can we inflate a view here instead of assigning a drawable image? 
       } 

      } 

Antwort

2

Ich glaube nicht, dass es möglich ist

Was können Sie tun, ist benutzerdefiniertes Symbol zur Laufzeit zeichnen:

  1. es Unentschieden auf Canvas

  2. Generiere Drawable zur Laufzeit (inst Nach dem Erstellen von XML können Sie ein Objekt erstellen. Also, wenn Sie <shape> geben sind, können Sie es mit neuen Shape(); in Java ersetzen)

  3. eine Ansicht generieren und kopieren Sie den Bitmap (How to convert Views to bitmaps?) diese Option würde provive sieht nur davon - wie beispielsweise Klick Zuhörer wird nicht funktionieren, so kann ich keinen Grund für die Wahl dieser Option

+0

Ich möchte nur einige dynamische Daten in der generierten Zeichnungsansicht anzeigen? Ist es möglich? –

+0

Suchen Sie in diesem Fall nach einer Möglichkeit, den Marker nach Position zu suchen/zu finden, und verwenden Sie .icon, um ihn zu ersetzen wenn eine solche Methode nicht existiert (und ich bin mir ziemlich sicher, dass es funktioniert) - Sie können 'reflection verwenden 'Verweis auf Markerliste/hashmap erhalten –

1

Dies ist möglich mit der folgenden Utility-Klasse finden Sie unter:

/** 
    * Utility class to generate Bitmaps for Symbol. 
    * <p> 
    * Bitmaps can be added to the map with {@link com.mapbox.mapboxsdk.maps.MapboxMap#addImage(String, Bitmap)} 
    * </p> 
    */ 
    private static class SymbolGenerator { 

    /** 
    * Generate a Bitmap from an Android SDK View. 
    * 
    * @param view the View to be drawn to a Bitmap 
    * @return the generated bitmap 
    */ 
    public static Bitmap generate(@NonNull View view) { 
     int measureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
     view.measure(measureSpec, measureSpec); 

     int measuredWidth = view.getMeasuredWidth(); 
     int measuredHeight = view.getMeasuredHeight(); 

     view.layout(0, 0, measuredWidth, measuredHeight); 
     Bitmap bitmap = Bitmap.createBitmap(measuredWidth, measuredHeight, Bitmap.Config.ARGB_8888); 
     bitmap.eraseColor(Color.TRANSPARENT); 
     Canvas canvas = new Canvas(bitmap); 
     view.draw(canvas); 
     return bitmap; 
    } 
    } 

vollen Beispiel, das diesen Code integriert, kann here gefunden werden. Beachten Sie, dass dieser Code in einem Hintergrundthread ausgeführt werden kann, sodass Sie den Hauptthread dafür nicht blockieren müssen. Während wir keinen binären ATM offen legen, suchen wir nach einem kleinen Plugin um diesen Code herum. Die Feature-Anforderung dafür kann here gefunden werden.

Verwandte Themen