Antwort

1

erreichen etwas wie Ja ich mich gefragt, ob ich etwas tun könnte, dh eine benutzerdefinierte zeigen View statt zeichnbar. Du kannst die Methode draw() überschreiben, aber leider muss es immer (jemand sag mir bitte, ich liege falsch) drawbar sein. Ich denke es ist, weil benutzerdefinierte View zu viel Speicher benötigen würde.

Das gesagt, je nachdem, was Sie erreichen möchten, ist es wahrscheinlich möglich, mapview-baloon Bibliothek zu hacken, um einen ähnlichen Effekt zu erzielen.

EDIT: Nachdem Sie nun gezeigt haben, was Sie versuchen, ich glaube, zu erreichen Sie draw() in Ihrem OverlayItem und in diesem Verfahren aufblasen Ihre ImageView außer Kraft setzen sollte. Aber ich habe nicht versucht, es so zu machen, also könnte es einige Nachteile geben (ich erinnere mich an einen SO-Thread zu einer ähnlichen Angelegenheit, der behauptete, dass es alle Berührungsereignisse auf dieser OverlayItem unterbrechen würde).

+0

Ich wurde in diese Suche und jetzt versuche ich mal sehen zu implementieren ... – Akram

+0

mapview-baloon seine andere Sache – Akram

+0

Es ermöglicht Ihnen, unabhängig von 'View' (einschließlich kundenspezifischer' ImageView') aufzublasen . Aber nicht ** statt ** von 'Drawable', sondern eher darüber (aber du kannst immer transparentes Drawable verwenden). Und ich denke, es sollte nicht so schwer sein, es zu hacken, also zeigt es nicht aufTap, sondern immer. –

2

Ich könnte ein bisschen spät sein, aber ich werde eine Lösung für andere, die ein ähnliches Problem konfrontiert haben/stellen konfrontiert. Was Sie also tun müssen (zumindest für die Lösung, die Sie suchen, d. H. Ein benutzerdefiniertes Bild, das einem kastenartigen Hintergrund aufgezwungen wird), setzen Sie das customImage mit Hilfe eines Canvas auf die Hintergrund-Box. Mit dieser Implementierung können Sie effektiv ein BitmapDrawable aus dem Canvas erstellen, das Sie dann als Marker für Ihre 'Overlay'/'ItemizedOverlay' zuweisen können. Bitte erstellen Sie auch keine ImageView für jedes Overlay, da dies Ihren Speicher/Ihre App zerstören würde, wenn Sie tausende solcher ImageViews gleichzeitig bearbeiten müssen. Verwenden Sie stattdessen BitmapDrawables, die während ihrer Erstellung den Overlays zugewiesen werden können und nicht zu wenig Speicher als ImageView verbrauchen.

public BitmapDrawable imageOnDrawable(int drawableBackground, Bitmap customImage) 
{ 
    //The following line is optional but I'd advise you to minimize the size of 
    //the size of the bitmap (using a thumbnail) in order to improve draw 
    //performance of the overlays (especially if you are creating a lot of overlays). 

    Bitmap customImageThumbnail = ThumbnailUtils.extractThumbnail(
                customImage, 100, 100); 

    Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId); 
    bm = Bitmap.createScaledBitmap(bm, 112, 120, false); 

    Canvas canvas = new Canvas(bm); 
    canvas.drawBitmap(bm, 0, 0, null); 
    // The 6,6 in the below line refer to the offset of the customImage/Thumbnail 
    // from the top-left corner of the background box (or whatever you want to use 
    // as your background) 
    canvas.drawBitmap(customImageThumbnail, 6, 6, null); 

    return new BitmapDrawable(bm); 

} 
1
In google mapv2, map-view ballon like functionality is provided by default. 
Just, you have to write some lines for it : 

private GoogleMap mapView; 

if (mapView == null) 
      mapView = ((MapFragment) getFragmentManager().findFragmentById(
        R.id.map_view)).getMap(); 

     mapView.getUiSettings().setMyLocationButtonEnabled(false); 
     mapView.setMyLocationEnabled(true); 

MarkerOptions markerDestinationOptions; 
markerDestinationOptions = new MarkerOptions() 
        .position(latLngDestination)    .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)); 

mapView.addMarker(markerDestinationOptions);