0

私はすでに簡単な Android アプリケーションを作成しました。これには Google マップも統合されています。また、MySQL (localhost) に接続して、経度と緯度の値を使用して目的の場所を表示することもできます。私の質問は、マーカーがクリックされたときに Google マップの上に別のオーバーレイ アイテムを作成しますか (フォースクエアで何が起こるかのように)?

具体的には、地名を含むテキストを表示したい。

オーバーレイ アイテムを表示するクラスを次に示します。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();
    }   
}
4

1 に答える 1

1

このプロジェクトを見てください -バルーン アイテム別オーバーレイ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を呼び出すときにパラメータの 1 つとして追加することを忘れないでくださいnew CustomItemizedOverlay()

于 2012-07-04T22:27:00.743 に答える