安卓谷歌地图视图的默认标记是什么?

7

请问在MAPVIEW中是否有标准/默认的叠加层/标记可以使用?

我已经在网上搜索了很久,所有的教程都是讲解如何扩展Overlay并将自定义图像放置在其中。

是否有更简单的方法?我只想要一个标记,没有什么花哨的东西。

谢谢

詹姆斯

2个回答

2
如果您正在使用Eclipse作为IDE,您可以将.png文件添加到您的/drawable-hdpi、/drawable-ldpi和/drawable-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) {

    }
}

我从一个教程中获取了大部分的代码,但现在无法找到链接。这些覆盖层相当容易操作。希望这可以帮助到您。


嗨,谢谢你的建议,但我想知道的是是否有默认标记可用,类似于Google地图JS API中的GMarker。 - James Lin
2
啊,我明白了。那么我的建议是为自己省点麻烦,直接从Google图片中复制标记。最终结果是一样的。另外,“默认情况下,它们使用G_DEFAULT_ICON,但您可以指定自定义图标。 GMarker构造函数将GLatLng和可选的GMarkerOptions对象作为参数。”来自http://code.google.com/apis/maps/documentation/javascript/v2/overlays.html - Alex

0
如果您正在使用Google Maps Android API v2,您可以使用以下方法。
mapView.getMap().addMarker(new MarkerOptions()
                               .position(new LatLng(10, 10))
                               .title("Hello world"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接