gpt4 book ai didi

java - 点击标记时是否可以在 Google map 上显示覆盖项目?

转载 作者:行者123 更新时间:2023-12-01 15:18:14 27 4
gpt4 key购买 nike

我已经制作了一个简单的 Android 应用程序,我还在其中集成了 Google map 。它还能够连接到 MySQL(本地主机)以使用经度和纬度值显示我想要的位置。我的问题是,当单击标记时是否可以在 Google map 上方制作另一个覆盖项目(就像 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();
}
}

最佳答案

看看这个项目 - 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 实例传递给叠加层的构造函数,并将其保存到私有(private)变量 mMapView

private MapVeiw mMapView;

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

并且,当您调用 new CustomItemizedOverlay() 时,不要忘记添加 MapView 作为参数之一。

关于java - 点击标记时是否可以在 Google map 上显示覆盖项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11335801/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com