点击标记时,是否可以在Google地图上显示叠加项?

时间:2012-07-04 21:55:29

标签: java android eclipse google-maps

我已经制作了一个简单的Android应用程序,我也在其中集成了Google地图。 它还能够连接到MySQL(localhost)以使用经度和纬度值显示我想要的位置。 我的问题是,当点击标记时,是否有可能在Google地图上方制作另一个叠加项目(就像在foursquare中发生的那样)?

具体来说,我想显示一个包含地点名称的文字。

继承我显示叠加项目的课程。 我制作了一个onTap方法,但它显示了一个对话框,我想显示一个显示该地名的简单文本框。

    package finddroid.map;

import java.util.ArrayList;

import android.app.AlertDialog;
import android.content.Context;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.text.TextPaint;

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

public class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem>
{

    private int markerHeight;

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

    private Context context;

    public CustomItemizedOverlay(Drawable defaultMarker)
    {
        super(boundCenterBottom(defaultMarker));
        markerHeight = ((BitmapDrawable) defaultMarker).getBitmap().getHeight();
        populate();
    }

    public CustomItemizedOverlay(Drawable defaultMarker, Context context)
    {
        this(defaultMarker);
        this.context = context;
    }

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

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

    @Override
    //Event when a place is tapped
    protected boolean onTap(int index)
    {
        OverlayItem item = mapOverlays.get(index);
        AlertDialog.Builder dialog = new AlertDialog.Builder(context);
        dialog.setTitle(item.getTitle());
        dialog.setMessage(item.getSnippet());
        dialog.show();
        return true;
    }

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

1 个答案:

答案 0 :(得分:1)

看看这个项目 - balloon itemized overlay。它使用自己的类扩展FrameLayout来显示气球。

因此,如果您想要修改代码,请将其放入onTap方法中,以便在录制的项目上显示TextView

TextView text = new TextView(context);
text.setText(item.getTitle());
MapView.LayoutParams params = new MapView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
    ViewGroup.LayoutParams.WRAP_CONTENT, item.getPoint(), MapView.LayoutParams.BOTTOM_CENTER);
params.mode = MapView.LayoutParams.MODE_MAP;
mMapView.addView(text, params);

我认为此代码简单易懂,您可以根据自己的需要进行改进。要使其工作,您必须将MapView的实例传递给叠加层的构造函数,并将其保存到私有变量mMapView

private MapVeiw mMapView;

public CustomItemizedOverlay(Drawable defaultMarker, Context context, MapView mapView) {
    this(defaultMarker);
    this.context = context;
    this.mMapView = mapView;
}

当您致电MapView时,请不要忘记将new CustomItemizedOverlay()添加为参数之一。