En mi mapa de la aplicación, estoy mostrando una serie de superposiciones en un mapa. Cada vez que me toca en una superposición necesito para mostrar una ventana emergente, como este

Cómo mostrar el popup de la sobre explotación de superposición en android?

¿Puede alguien ayudarme a resolver este?

Esta pregunta ya está discutido. La información de here.
He visto que .de no cumplir con mi duda , necesito un popup exactamente int imagen.
Para que usted tiene que personalizar la ventana emergente.
Ok lo que quiero decir es que necesito conseguir emergente en girada ubicación señal de flecha . Yo lo hice con pan tostado y personalizada emergente, pero no soy capaz de conseguir emergente en girada ubicación .
Está usted recibiendo emergente? Es el problema con la posición?

OriginalEl autor Srinivas | 2010-12-20

2 Comentarios

  1. 8

    Sí es posible debe diseñar nuestra propia ventana de información para mostrar la información a través del toque en el mapa soy el suministro de código para usted si usted es entender que por favor reproducción mí.

    public class MapLocationOverlay  extends Overlay  {
    private boolean isNameAddHold=true;
    private Bitmap bitmap,bitCross,bitMoreInformation;
    int testX,testY,count=0;
    int infoWindowOffsetX,infoWindowOffsetY;
    public String name,address,argName,argAddress,argid;
    // Store these as global instances so we don't keep reloading every time
    private Bitmap bubbleIcon, shadowIcon;
    private MapLocationViewer mapLocationViewer;
    double toLat, toLng;
    private Paint   innerPaint, borderPaint, textPaint;
    private boolean isRemovePriorPopup=false;
    private boolean temp=true,first=true, firstDraw = true;
    public boolean tempDefaule=true;
    public MoreInformation myMoreInformation;
    public PantryLocation location;
    // The currently selected Map Location...if any is selected.  This tracks whether an information  
    // window should be displayed & where...i.e. whether a user 'clicked' on a known map location
    private PantryLocation selectedMapLocation;  
    public MapLocationOverlay(MapLocationViewer mapLocationViewer,PantryLocation arglocation) {
    this.mapLocationViewer = mapLocationViewer;
    location=arglocation;
    bubbleIcon = BitmapFactory.decodeResource(mapLocationViewer.getResources(),R.drawable.bubble);
    shadowIcon = BitmapFactory.decodeResource(mapLocationViewer.getResources(),R.drawable.shadow);
    bitmap = BitmapFactory.decodeResource(mapLocationViewer.getResources(),R.drawable.infowindow);
    bitCross = BitmapFactory.decodeResource(mapLocationViewer.getResources(),R.drawable.crass);
    bitMoreInformation = BitmapFactory.decodeResource(mapLocationViewer.getResources(),R.drawable.more_informations_new);
    }
    @Override
    public boolean onTouchEvent(MotionEvent e, MapView mapView) {
    //TODO Auto-generated method stub
    if (e.getAction() == 0)
    {
    this.tempDefaule=false;
    }
    if (e.getAction() == 1)
    {
    this.tempDefaule=false;
    }
    if (e.getAction() == 2)
    {
    this.tempDefaule=false;
    }
    return super.onTouchEvent(e, mapView);
    }       
    @Override
    public boolean onTap(GeoPoint p, MapView    mapView)  {
    //this.tempDefaule=false;
    // Store whether prior popup was displayed so we can call invalidate() & remove it if necessary.
    // Next test whether a new popup should be displayed
    selectedMapLocation = getHitMapLocation(mapView,p);
    mapView.invalidate();       
    // Lastly return true if we handled this onTap()
    return selectedMapLocation != null;
    }
    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    drawMapLocations(canvas, mapView, shadow);
    //this.tempDefaule=false;
    drawInfoWindow(canvas, mapView, shadow);
    //this.tempDefaule=false;
    }
    /**
    * Test whether an information balloon should be displayed or a prior balloon hidden.
    */
    private PantryLocation getHitMapLocation(MapView    mapView, GeoPoint   tapPoint) {
    // Track which MapLocation was hit...if any
    PantryLocation hitMapLocation = null;
    RectF hitTestRecr = new RectF();
    Point screenCoords = new Point();
    ArrayList<PantryLocation> iterator =mapLocationViewer.getMapLocations();
    for(int i=0;i<iterator.size();i++) {       
    PantryLocation testLocation = iterator.get(i);
    // Translate the MapLocation's lat/long coordinates to screen coordinates
    mapView.getProjection().toPixels(testLocation.getPoint(), screenCoords);
    //Create a 'hit' testing Rectangle w/size and coordinates of our icon
    //Set the 'hit' testing Rectangle with the size and coordinates of our on screen icon
    hitTestRecr.set(-bubbleIcon.getWidth()/2,-bubbleIcon.getHeight(),bubbleIcon.getWidth()/2,0);
    hitTestRecr.offset(screenCoords.x,screenCoords.y);
    // Finally test for a match between our 'hit' Rectangle and the location clicked by the user
    mapView.getProjection().toPixels(tapPoint, screenCoords);
    //hitMapLocation = testLocation;
    if (hitTestRecr.contains(screenCoords.x,screenCoords.y)) {
    hitMapLocation = testLocation;
    first = true;
    isNameAddHold = true;
    break;
    }
    }
    testX=(int)screenCoords.x;
    testY=(int)screenCoords.y;
    // Lastly clear the newMouseSelection as it has now been processed
    tapPoint = null;
    if(hitMapLocation==null && selectedMapLocation!=null)
    return selectedMapLocation; 
    return hitMapLocation;
    }
    private void drawMapLocations(Canvas canvas, MapView    mapView, boolean shadow) {
    int i=0;count++;
    ArrayList<PantryLocation> iterator =mapLocationViewer.getMapLocations();
    Point screenCoords = new Point();
    for(i=0;i<iterator.size();i++) {       
    PantryLocation location = iterator.get(i);
    mapView.getProjection().toPixels(location.getPoint(), screenCoords);
    //mapView.getController().setCenter(location.getPoint());
    if (shadow) {
    // Only offset the shadow in the y-axis as the shadow is angled so the base is at x=0; 
    canvas.drawBitmap(shadowIcon, screenCoords.x, screenCoords.y - shadowIcon.getHeight(),null);
    } else {
    canvas.drawBitmap(bubbleIcon, screenCoords.x - bubbleIcon.getWidth()/2, screenCoords.y - bubbleIcon.getHeight(),null);
    }
    }
    //     if(i==iterator.size()){
    //         this.tempDefaule=false;}
    if(tempDefaule==true)
    {
    PantryLocation location1 = this.location;
    //mapView.getProjection().toPixels(location.getPoint(), screenCoords);
    Point screenCoord = new Point();
    mapView.getController().setCenter(location1.getPoint());
    mapView.getController().setZoom(15);
    // tempDefaule=false;
    //mapView.getController().setCenter(location.getPoint());   
    }
    //tempDefaule=false;    
    }           //mapView.getProjection().toPixels(location.getPoint(), screenCoord);
    //canvas.drawBitmap(bubbleIcon, screenCoord.x - bubbleIcon.getWidth()/2, screenCoord.y - bubbleIcon.getHeight(),null);
    //mapView.invalidate();
    private void drawInfoWindow(Canvas canvas, MapView  mapView, boolean shadow) {
    //this.tempDefaule=false;
    if ( selectedMapLocation != null) {
    if ( shadow) {
    // Skip painting a shadow in this tutorial
    } else {
    // First determine the screen coordinates of the selected MapLocation
    isRemovePriorPopup=true;
    Point selDestinationOffset = new Point();
    mapView.getProjection().toPixels(selectedMapLocation.getPoint(), selDestinationOffset);
    // Setup the info window with the right size & location
    int INFO_WINDOW_WIDTH = 125;
    int INFO_WINDOW_HEIGHT = 25;
    RectF infoWindowRect = new RectF(0,0,100,20);   
    RectF closeRect = new RectF(0,0,20,20); 
    infoWindowOffsetX = selDestinationOffset.x-INFO_WINDOW_WIDTH/2;
    infoWindowOffsetY = selDestinationOffset.y-INFO_WINDOW_HEIGHT-bubbleIcon.getHeight();
    infoWindowRect.offset(infoWindowOffsetX+95,infoWindowOffsetY-45);
    closeRect.offset(infoWindowOffsetX+160,infoWindowOffsetY-90);
    Paint myPaintBlack=new Paint();
    Paint myPaintWhite=new Paint();
    myPaintWhite.setARGB(255, 255, 255, 255);
    // Draw inner info window
    canvas.drawRoundRect(infoWindowRect, 5, 5, getInnerPaint());
    // Draw border for info window
    canvas.drawRoundRect(infoWindowRect, 5, 5, getBorderPaint());
    // Draw the MapLocation's name
    myPaintBlack.setColor(Color.BLACK);
    myPaintBlack.setTextSize(20);
    canvas.drawBitmap(bitmap, infoWindowOffsetX-50, infoWindowOffsetY-100,getInnerPaint());
    if(isNameAddHold)
    {
    argid=selectedMapLocation.getID();
    argName=selectedMapLocation.getName();
    name=selectedMapLocation.getName();
    toLat = selectedMapLocation.getLatitude();
    toLng = selectedMapLocation.getLongitude();
    if(name.length()>18)
    name=selectedMapLocation.getName().substring(0,18)+"..";
    argAddress=selectedMapLocation.getAddress();
    address=selectedMapLocation.getAddress();
    if(address.length()>30)
    address=selectedMapLocation.getAddress().substring(0,30)+"..";
    }
    canvas.drawText(name,infoWindowOffsetX-45,infoWindowOffsetY-70,myPaintBlack);
    myPaintBlack.setTextSize(13);
    canvas.drawText(address,infoWindowOffsetX-45,infoWindowOffsetY-55,myPaintBlack);
    // Draw inner info window
    canvas.drawRoundRect(infoWindowRect, 5, 5, getInnerPaint());
    // Draw border for info window
    canvas.drawRoundRect(infoWindowRect, 5, 5, getBorderPaint());
    // Draw the MapLocation's name
    myPaintBlack.setColor(Color.CYAN);
    myPaintBlack.setTextSize(11);
    //canvas.drawText("Click for more info..",infoWindowOffsetX+105,infoWindowOffsetY-33,myPaintBlack);
    canvas.drawBitmap(bitMoreInformation, infoWindowOffsetX+95, infoWindowOffsetY-45,getInnerPaint());
    //canvas.drawBitmap(bitCross, infoWindowOffsetX+160, infoWindowOffsetY-90,getInnerPaint());
    }
    }
    if(isRemovePriorPopup)
    {
    if(((testX>(infoWindowOffsetX+95)&&testX<(infoWindowOffsetX+195)))&&(testY>(infoWindowOffsetY-45)&&testY<(infoWindowOffsetY-25)))
    {
    if(temp){
    try
    {
    temp=false;
    isNameAddHold=false;
    isRemovePriorPopup=false;
    Context context=mapLocationViewer.cn;
    Toast.makeText(context, "Loading...", Toast.LENGTH_SHORT).show();
    Intent intent=new Intent(context, MoreInformation.class);
    intent.putExtra("Id",argid);
    intent.putExtra("Name",argName);
    intent.putExtra("Address",argAddress);
    intent.putExtra("Latitude",toLat);
    intent.putExtra("Longitude",toLng);
    context.startActivity(intent);
    }
    catch (Exception ex)
    {
    Log.d("Redirected Error :", ex.getMessage());
    }
    //canvas.drawText("This is for Testing",testX,testY,myPaintBlack);
    }}
    else if(((testX>(infoWindowOffsetX+160)&&testX<(infoWindowOffsetX+180)))&&(testY>(infoWindowOffsetY-90)&&testY<(infoWindowOffsetY-70)))
    {
    if(isRemovePriorPopup)
    {
    isRemovePriorPopup=false;                  
    selectedMapLocation=null;
    draw(canvas, mapView, shadow);
    //mapLocationViewer.setDZoom();
    }
    }
    }
    }
    public Paint getInnerPaint() {
    if ( innerPaint == null) {
    innerPaint = new Paint();
    innerPaint.setARGB(225, 75, 75, 75); //gray
    innerPaint.setAntiAlias(true);
    }
    return innerPaint;
    }
    public Paint getBorderPaint() {
    if ( borderPaint == null) {
    borderPaint = new Paint();
    borderPaint.setARGB(255, 255, 255, 255);
    borderPaint.setAntiAlias(true);
    borderPaint.setStyle(Style.STROKE);
    borderPaint.setStrokeWidth(2);
    }
    return borderPaint;
    }
    public Paint getTextPaint() {
    if ( textPaint == null) {
    textPaint = new Paint();
    textPaint.setARGB(255, 255, 255, 255);
    textPaint.setAntiAlias(true);
    }
    return textPaint;
    }
    }

    En este código tengo el diseño de una función de dibujar infowindow

    el código no es comprensible por favor, puedes editar y escriba faltar a clases? como público MoreInformation myMoreInformation; public PantryLocation ubicación;MapLocationViewer
    Su demasiado largo, y no el punto. Espero que sea más claro.

    OriginalEl autor DynamicMind

  2. 2
    MarkerOptions maropt=new MarkerOptions()
    .position(new LatLng(lati, longi))
    .snippet("any text")
    .title("set title here");
    map.addMarker(maropt);

    mapa es un objeto de GoogleMap . Estoy utilizando aquí marcadores para establecer ventana emergente

    Esta pregunta se la hicieron en el momento de la API v2 no existe. Creo que no tiene sentido revivir en el contexto de la nueva API.

    OriginalEl autor hari_om

Dejar respuesta

Please enter your comment!
Please enter your name here