2010-12-20 5 views
10

मेरी नक्शा आवेदन में, मैं एक नक्शे पर ओवरले का एक सेट प्रदर्शित कर रहा हूँ। जब भी मैं एक उपरिशायी मैं एक पॉपअप प्रदर्शित करने की आवश्यकता पर टैप करते हैं, इसएंड्रॉइड में ओवरले टैप करने पर पॉपअप कैसे प्रदर्शित करें?

Image of MapView with overlay popup

की तरह किसी भी एक मुझे इस सुलझाने के लिए मदद कर सकते हैं?

+0

के संभावित डुप्लिकेट सेट करने के लिए [मानचित्र ओवरले क्लिक करने पर पॉप अप दिखाने के लिए कैसे?] (Http://stackoverflow.com/questions/2379654/how-to-show-pop-up -ऑन-क्लिक-मैप-ओवरले) –

+0

इस प्रश्न पर पहले से ही चर्चा की गई है। विवरण प्राप्त करें [यहां] (http://stackoverflow.com/questions/2379654/how-to-show-pop-up-on-clicking-map-overlay)। – Sandy

+0

मैंने देखा है कि यह मेरी संदेह को पूरा नहीं कर, मैं एक पॉपअप बिल्कुल पूर्णांक छवि की जरूरत है। – Srinivas

उत्तर

8

हाँ, यह संभव है आप नक्शे में नल से अधिक प्रदर्शन जानकारी के लिए हमारे आत्म जानकारी विंडो डिजाइन मैं तुम्हें करने के लिए आपूर्ति कोड हूं चाहिए अगर आप समझते हैं कि मुझे फिर से चलाने के लिए कृपया कर रहे हैं।

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


} 

इस कोड में मैं डिजाइन एक समारोह infowindow आकर्षित

+1

कोड समझ में नहीं आता है क्या आप कृपया गायब कक्षाओं को संपादित और दर्ज कर सकते हैं? सार्वजनिक मोरफॉर्मेशन myMoreInformation की तरह; सार्वजनिक PantryLocation स्थान; MapLocationViewer – UMAR

+0

इसकी बहुत लंबा है, और बात करने के लिए नहीं। मुझे आशा है कि यह और अधिक स्पष्ट होगा। – Siddharth

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

map.addMarker(maropt); 

नक्शा GoogleMap का एक उद्देश्य है। मैं यहाँ मार्कर का उपयोग कर रहा हूँ पॉप अप विंडो

+0

इस सवाल से पूछा गया था कि एपीआई v2 मौजूद नहीं था। मुझे नहीं लगता कि यह नई एपीआई के संदर्भ में इसे पुनर्जीवित करने के लिए समझ में आता है। –