2011-12-11 127 views
1

谷歌地圖,它允許我們指向任何我們想要的位置。引腳指向後,推針頂部會出現「Bubble」彈出框。我可以知道如何做彈出窗口框嗎?任何代碼顯示?現在我正在使用警告對話框,但我希望它是「泡泡」彈出窗口。泡泡彈出框

List<Overlay> mapOverlays = mapView.getOverlays(); 
     MapOverlay mapOverlay = new MapOverlay(); 

     mapOverlays.add(mapOverlay); 

     // obtain gps location 
     lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     locationListener = new MyLocationListener(); 

     lm.requestLocationUpdates(
     // LocationManager.GPS_PROVIDER, 
       LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
    } 

    private class MyLocationListener implements LocationListener { 

     @Override 
     public void onLocationChanged(Location loc) { 

      k = new GeoPoint((int) (loc.getLatitude() * 1E6), 
        (int) (loc.getLongitude() * 1E6)); 
      mc.animateTo(k); 
      mc.setZoom(18); 

      // Add a location marker 
      MapOverlay mapOverlay = new MapOverlay(); 
      List<Overlay> listofOverlays = mapView.getOverlays(); 
      listofOverlays.clear(); 
      listofOverlays.add(mapOverlay); 

      // invalidate() method forces the MapView to be redrawn 
      mapView.invalidate(); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
     } 
    } 

    @Override 
    protected boolean isRouteDisplayed() { 
     return false; 
    } 

    class MapOverlay extends com.google.android.maps.Overlay { 

     @Override 
     public boolean onTap(final GeoPoint p, MapView mapView) { 
      // TODO Auto-generated method stub 

      k = p; 
      mc = mapView.getController(); 
      mc.animateTo(p); 

      mapView.invalidate(); 

      Geocoder geoCoder = new Geocoder(getBaseContext(), 
        Locale.getDefault()); 
      try { 
       List<Address> addresses = geoCoder.getFromLocation(
         p.getLatitudeE6()/1E6, p.getLongitudeE6()/1E6, 1); 
       String add = ""; 
       if (addresses.size() > 0) { 
        for (int i = 0; i < addresses.get(0) 
          .getMaxAddressLineIndex(); i++) 
         add += addresses.get(0).getAddressLine(i) + "\n"; 
        txtAddress.setText("Address: " + add); 
       } 
@Override 
     public boolean draw(Canvas canvas, MapView mapView, boolean shadow, 
       long when) { 
      super.draw(canvas, mapView, shadow); 
      if (k != null) { 
       // ---translate the GeoPoint to screen pixels--- 
       Point screenPts = new Point(); 
       mapView.getProjection().toPixels(k, screenPts); 

       // ---add the marker--- 
       Bitmap bmp = BitmapFactory.decodeResource(getResources(), 
         R.drawable.passenger); 
       canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 50, null); 
      } 
      return true; 
     } 
    } 
} 

回答

0

聽起來像是你正在尋找的InfoWindow。順便說一句,在新版本的API中,它們沒有圓角(它們看起來更像盒子,不像氣泡)。您可以通過在加載地圖API的JavaScript網址中請求以前版本的API來恢復舊版本。

+0

我真的不明白你的意思。你有任何代碼示例?我想如何把代碼放入? – sowhat

+0

您是否閱讀過我發給您的鏈接?它有代碼示例。您也可以在這裏查看InfoWindow API的參考資料:http://code.google.com/apis/maps/documentation/javascript/reference.html#InfoWindow – danludwig

1

我目前正在製作一個地圖應用程序,我還需要顯示'Bubble'彈出窗口,以下博客文章對我有相當幫助。

This first post顯示瞭如何使用視圖中嵌入的9補丁圖像來生成彈出窗口。代碼沒問題,但確實留下了一些未回答的問題,一些評論者已經要求澄清一些額外的源代碼。

This post from the Android Developers blog解釋什麼是9修補圖像是如何創建一個。

使用這兩個帖子,我能夠將一些代碼放在一起,這很好,所以希望您能夠操作它以滿足您的需求。

+1

只需對此進行更新 - 第一篇文章位於我自己的博客上,現在我已經在那裏添加了一個鏈接到完整的源代碼,以防萬一在任何時候幫助任何人。 – actionshrimp

+0

感謝您的更新 - 和來源,我發現這篇文章真的很有幫助。 – DilbertDave

0

谷歌不提供API來做到這一點,看看this。 Victor的答案給出了一個鏈接到適合該法案的開源代碼。