2010-08-31 86 views
7

想知道是否有可以在MAPVIEW中使用的标准/默认叠加/标记?默认标记为Android谷歌MAPVIEW?

我一直在网上搜索,所有的教程都谈论扩展Overlay并把你的自定义图像放在上面。

有没有更简单的方法?我只想要一个标记,没有什么奇特的。

问候

詹姆斯

回答

2

如果您使用的是Eclipse作为IDE,您可以添加.png文件,例如,你的/可绘制,华电国际,/绘制-LDPI,/绘制-MDPI目录。然后,您可以参考清单放置和获取到您的叠加有点像这样:

package com.practice.mapper; 

import java.util.ArrayList; 

import android.graphics.drawable.Drawable; 

import com.google.android.maps.ItemizedOverlay; 
import com.google.android.maps.OverlayItem; 

public class Itemization extends ItemizedOverlay<OverlayItem> { 

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

    public Itemization(Drawable defaultMarker) { 

     super(boundCenterBottom(defaultMarker)); 
     // super(defaultMarker); 

    } 

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

    public void addOverlay(OverlayItem overlay) { 
     mOverlays.add(overlay); 
     populate(); 
    } 

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

} 



package com.practice.mapper; 

import java.util.List; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapView; 
import com.google.android.maps.Overlay; 
import com.google.android.maps.OverlayItem; 

import android.content.Context; 
import android.graphics.drawable.Drawable; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.location.LocationProvider; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.ZoomControls; 

public class Mapper extends MapActivity implements LocationListener { 

    Location presentLocation; 
    ZoomControls z; 
    LinearLayout linearLayout; 
    MapView mapView; 
    List<Overlay> mapOverlays; 
    Drawable drawable; 
    Itemization itemizedOverlay; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mapView = (MapView) findViewById(R.id.mapview); 
     mapView.setBuiltInZoomControls(true); 

     mapOverlays = mapView.getOverlays(); 
     drawable = this.getResources().getDrawable(R.drawable.androidmarker); 
     itemizedOverlay = new Itemization(drawable); 

     GeoPoint point = new GeoPoint(19240000, -99120000); 
     OverlayItem overlayitem = new OverlayItem(point, "", ""); 
     itemizedOverlay.addOverlay(overlayitem); 

     GeoPoint point2 = new GeoPoint(35410000, 139460000); 
     OverlayItem overlayitem2 = new OverlayItem(point2, "", ""); 
     itemizedOverlay.addOverlay(overlayitem2); 

     mapOverlays.add(itemizedOverlay); 
    } 

    public void btnUpdateClicked(View v) { 

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

     LocationProvider p = lm.getProvider(LocationManager.GPS_PROVIDER); 

     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 20000, 1, this); 

     List<String> enabledProv = lm.getProviders(true); 

     Location l1 = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     Location l2 = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
     Location l3 = lm.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); 

     Button b = new Button(this.getApplicationContext()); 
     b.setOnClickListener(new OnClickListener(){ 

      public void onClick(View v) { 

      }}); 

     lm.toString(); 
    } 

    @Override 
    protected boolean isRouteDisplayed() { 

     return false; 
    } 

    public void onLocationChanged(Location location) { 

     presentLocation = location; 
     Log.d("TEST", "New location received"); 
    } 

    public void onProviderDisabled(String provider) { 

    } 

    public void onProviderEnabled(String provider) { 

    } 

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

    } 
} 

我得到了大多数代码从一个教程,我再也找不到链接。这些叠加层非常易于操作。希望这可以帮助。

+0

您好,感谢您的建议,但我在寻找的是如果有一个默认标记使用,类似于谷歌地图js API GMarker。 – 2010-08-31 00:46:47

+2

啊,我明白了。然后,我的建议是省去麻烦,直接从Google图像复制标记。最终结果是一样的。 “ 另外, ”默认情况下,它们使用使用G_DEFAULT_ICON,但您可以指定自定义图标.GGarker构造函数将GLatLng和可选的GMarkerOptions对象作为参数。 来自http://code.google.com/apis/maps/documentation/javascript/v2/overlays.html – Alex 2010-08-31 01:05:55

0

如果您使用的是Google Maps Android API v2,则可以使用以下方法。

mapView.getMap().addMarker(new MarkerOptions() 
           .position(new LatLng(10, 10)) 
           .title("Hello world"));