android - 在 map 上标记位置名称?

标签 android maps location

在我的 Android 应用程序中,我想在 map 上标记一个位置(我知道该位置的地址)。当我在 map 上标记它时,我也想显示位置名称。我该怎么做?

我有这个:OverlayItem(p ,"Kaufland", "Magic Kingdom"),但在 map 上只出现点,没有名称。

这是我的代码:

package com.ShoppingList.Shops;


import java.io.IOException;
import java.util.List;
import java.util.Locale;

import com.ShoppingList.R;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

import java.util.ArrayList;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;

public class ShowMap extends MapActivity {
    private MapView mapView;
    MapController mc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.showmap);

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

        Drawable marker=getResources().getDrawable(R.drawable.pushpin);
        marker.setBounds(0, 0, marker.getIntrinsicWidth(),
        marker.getIntrinsicHeight());

        InterestingLocations funPlaces = new InterestingLocations(marker);
        mapView.getOverlays().add(funPlaces);
        GeoPoint pt = funPlaces.getCenter(); // get the first-ranked point
        mapView.getController().setCenter(pt);
        mapView.getController().setZoom(15);

    }
    @Override
    protected boolean isLocationDisplayed() {
    return false;
    }
    @Override
    protected boolean isRouteDisplayed() {
    return false;
    }
    class InterestingLocations extends ItemizedOverlay {
        private List locations = new ArrayList();
        private Drawable marker;
        String adresa;
        public InterestingLocations(Drawable marker)
        {
        super(marker);
        this.marker=marker;
        // create locations of interest
        Bundle bundle = getIntent().getExtras();
        adresa = bundle.getString("adress");

        Geocoder geoCoder = new Geocoder(ShowMap.this, Locale.getDefault());
        try {
        List addresses = geoCoder.getFromLocationName(adresa, 5);
            String add = "";
            if (addresses.size() > 0) {
                GeoPoint p = new GeoPoint((int) (addresses.get(0).getLatitude() * 1E6), 
                        (int) (addresses.get(0).getLongitude() * 1E6));

                locations.add(new OverlayItem(p ,"Kaufland", "Magic Kingdom"));

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        populate();
    }
    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    super.draw(canvas, mapView, shadow);
    boundCenterBottom(marker);
    }
    @Override
    protected OverlayItem createItem(int i) {
    return locations.get(i);
    }
    @Override
    public int size() {
    return locations.size();
    }
    }
}

最佳答案

我不敢相信没有更简单的方法,但它看起来并不像有。这是一种方法: http://binwaheed.blogspot.com/2011/05/android-display-title-on-marker-in.html

此外,我强烈建议您使用抗锯齿,除非您想要难看的文本:

TextPaint paintText = new TextPaint(Paint.ANTI_ALIAS_FLAG);

关于android - 在 map 上标记位置名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6074287/

相关文章:

Java根据第一个数组的索引对第二个数组进行排序

android - 无法使用 Google 的融合位置 API 获取位置

clojure - 如何获取具有统一命名空间键的映射的命名空间?

android - 对于 DataOutputStream 来说字符串太大

android - NoSuchMethod :org. jetbrains.kotlin.resolve.diagnostics.DiagnosticSuppressor$Companion.getEP_NAME()Lcom/intellij/openapi/extensions/ExtensionPointName;

android - onPreferenceClick 和 OnPreferenceClickListener

mysql - 查询数据库中的地址并将其显示在谷歌地图上

json - Swift:指向多边形?如何检查用户的位置是否在 Geo-JSON 多边形内?

java - Google 手机 map "My Location"功能如何运作?

android - 在 EditText 中处理 “Enter” 并在其中插入字符