我已经制作了一个简单的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();
}
}
答案 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()
添加为参数之一。