2011-11-09 17 views
0

多くの異なるガイド/チュートリアルを見て、ユーザーがマップ上でオーバーレイ(マーカー)をクリックすると簡単なアラートボックス/ツールチップを実装する方法が分かりません。オーバーレイタップのツールチップ/アラートを表示

私が見たすべてのガイドは、私がすでに持っているコードで実装するのが混乱しています。マーカーは外部のJSONから来ています。そこではマーカーを作成して地図上に配置する緯度/経度を取得します。これまでのところ、すべてのマーカーがありますが、ユーザーがタップするとアラートボックスやツールチップを実装する最良の方法を見つけることができません。

私のコードは以下に掲載されています...私はそれがたくさんあると知っていますが、どんな助けもありがとうございます。本当にありがとう !

パッケージca.transcontinental.android.vanilla.demo;

import (...) 

public class GoogleMapActivity extends MapActivity implements LocationListener { 

    MapView mapView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.location_map_layout); 
     LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this); 

     this.mapView = (MapView) findViewById(R.id.mapview); 
     this.mapView.setBuiltInZoomControls(true); 
     this.mapView.getController().setZoom(10);    
    } 

    private BaseApplication getBaseApplication() { 
     return (BaseApplication)getApplication(); 
    } 

    public void onLocationChanged(Location location) { 
     if (location != null) { 

      String sLat = String.valueOf(location.getLatitude()); 
      String sLng = String.valueOf(location.getLongitude()); 

      try { 
       getBaseApplication().debug("GPS: lat="+sLat + ", lng="+sLng);      
       RestQueryEngine.getInstance().setup("http://example.com/JSONPublicationService.svc", "key", getBaseApplication().getOrgCode(), getBaseApplication().getBannerCode()); 
       StoreList list = StoreList.getStoreListByGeopos(sLat, sLng);     
       for(Store store: list){     
        System.out.println(store); 
        MapOverlay overlay = new MapOverlay(Double.parseDouble(store.getLatitude()), Double.parseDouble(store.getLongitude()), ""); 
        mapView.getOverlays().add(overlay);     
       } 
       mapView.invalidate(); 
      } 
      catch (Throwable e) { 
       e.printStackTrace(); 
       getBaseApplication().showExceptionMessage(e); 
      } 


      LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
      lm.removeUpdates(this); 

     } 

    } 


    public void onProviderDisabled(String provider) { 
    } 

    public void onProviderEnabled(String provider) { 
    } 

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

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

    class MapOverlay extends Overlay { 
     private GeoPoint locpoint; 
     private String label; 

     public MapOverlay(GeoPoint geoPoint, String name) { 
      this.locpoint = geoPoint; 
      this.label = name; 
     } 
     public MapOverlay(double lat, double lon, String name) { 
      this(new GeoPoint((int)(lat*1E6), (int)(lon*1E6)), name);   
     }   

     @Override 
     public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { 
      super.draw(canvas, mapView, shadow); 
      Point screenPoint = new Point();    
      mapView.getProjection().toPixels(this.locpoint, screenPoint); 
      Bitmap markerImage = BitmapFactory.decodeResource(getResources(), R.drawable.androidmarker); 
      canvas.drawBitmap(markerImage, screenPoint.x - markerImage.getWidth()/2, screenPoint.y - markerImage.getHeight()/2, null); 
      return true; 
     }  

    } 
} 

答えて

0

私はそれを行う方法は、オーバーレイの代わりにOverlayItem使用し、ItemizedOverlay

class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem> { 

    private ArrayList<MapOverlay> mOverlays = new ArrayList<MapOverlay>(); 

    public CustomItemizedOverlay(Drawable defaultMarker) { 
     super(boundCenterBottom(defaultMarker)); 
    } 

    public void addItem(MapOverlay item) { 
     mOverlays.add(item); 
    } 

    @Override 
    protected MapOverlay createItem(int i) { 
     return mOverlays.get(i); 
    } 

    @Override 
    public int size() { 
     return mOverlays.size(); 
    } 

    @Override 
    protected boolean onTap(int index) { 
     // Handle tap for the given overlay item based on this index 
     return super.onTap(index); 
    } 
} 

これは、あなたのデフォルトのマーカーとしてR.drawable.androidmarkerを使用していません逆さまに持っているを拡張するクラスを作成することですオーバーレイでdrawメソッドを実装することはあなたのために行われます。

関連する問題