2012-04-09 12 views

Respuesta

1

Sí, me preguntaba si podía hacer algo como esto, es decir, mostrar una costumbre View en lugar de dibujable Puede anular el método draw(), pero desafortunadamente siempre (alguien por favor dígame que estoy equivocado) tiene que ser dibujable. Creo que es porque View personalizado tomaría demasiada memoria.

Dicho esto, dependiendo de lo que esté tratando de lograr, probablemente sea posible piratear la biblioteca mapview-baloon para lograr un efecto similar.

EDIT: Ahora que ya has demostrado lo que estamos tratando de lograr Creo que debería anular draw() en su OverlayItem y en este método de inflar el ImageView. Pero no traté de hacerlo de esta manera, por lo que puede haber algunos inconvenientes (recuerdo un hilo SO en un asunto similar que afirmaba que interrumpiría todos los eventos táctiles en este OverlayItem).

+0

que estaba buscando en esto y ahora estoy tratando de poner en práctica vamos a ver ... – Akram

+0

MapView-globo es diferente cosa – Akram

+0

Le permite inflar lo que sea 'View' (incluida la costumbre' ImageView') . Pero no ** en su lugar ** de 'Drawable', sino sobre eso (pero siempre puedes usar drawable transparente). Y creo que no debería ser tan difícil piratearlo, así que no aparece en Toca, sino que siempre. –

2

Podría ser un poco tarde, pero publicaré una solución para otras personas que se han enfrentado/están enfrentando un problema similar. Entonces, básicamente, lo que tiene que hacer (al menos para la solución que está buscando, es decir, una imagen personalizada impuesta sobre un fondo tipo caja) es imponer la imagen personalizada en el cuadro de fondo con la ayuda de un lienzo. Con esta implementación, puede crear de manera efectiva un mapa de bits extraíble del lienzo que luego puede asignar como marcador para su 'Superposición'/'Objeto detallado'. Además, absténgase de crear un ImageView para cada superposición ya que esto destruirá completamente su memoria/su aplicación si tiene que tratar con miles de tales ImageView simultáneamente. En su lugar, utilice BitmapDrawables que se pueden asignar a las superposiciones durante su construcción y no consuman memoria suficiente como un ImageView.

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