4

MapQuest が提供する Android でマップを使用していますが、Google マップと同じ方法で実装されているため、同じ質問が適用されます。

オーバーレイ項目については、TextView がいくつかの情報を表示するため、ImageView と TextView を含むレイアウトを使用したいと思います。問題は、Drawable フォルダーから取得する必要があるオーバーレイとしてのみ、Drawable を表示できるように見えることです。

オーバーレイ アイテムを追加するコードは次のとおりです。

private void loadSingleOverlay(TapControlledMap mapViewPassed, String title, String address)
{
    Drawable icon = getResources().getDrawable(R.drawable.marker2);

    OverlayItem newItem = new OverlayItem(point, title, address);

    overlay = new ExtendedItemizedOverlay(icon);
    overlay.addItem(newItem);

    // add a tap listener
    overlay.setTapListener(tapListener);

    List<Overlay> listOfOverlays = mapViewPassed.getOverlays();
    listOfOverlays.clear();
    listOfOverlays.add(overlay);
    mapViewPassed.invalidate();

}

そして、私が膨らませて使用したいレイアウト:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/marker_red" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1" />

</RelativeLayout>

これが私が目指している結果です:

ここに画像の説明を入力

皆さんありがとう

4

1 に答える 1

4

簡単ではない。私が知っている唯一の方法は、ビュー (背景とテキスト ビューを含むレイアウトなど) を作成し、それをビットマップとしてレンダリングすることです。

public static Bitmap loadBitmapFromView(View v) {
    DisplayMetrics dm = v.getContext().getResources().getDisplayMetrics();  
    Bitmap b = Bitmap.createBitmap(Math.round(v.getMeasuredWidth() * dm.density), Math.round(v.getMeasuredHeight() * dm.density), Bitmap.Config.ARGB_8888);                
        Canvas c = new Canvas(b);
        v.draw(c);
        return b;
    }

次に、以下のようなものを使用してマップに追加できます。マーカー ビューのサイズに応じて、境界をいじる必要があります。

Drawable d = new BitmapDrawable(Utils.loadBitmapFromView(yourView));
        d.setBounds(-35, -30, Math.round(d.getIntrinsicWidth() * dm.density) - 35, Math.round(d.getIntrinsicHeight() * dm.density) - 30);
        overlayItem.setMarker(d);
        overlayListView.add(overlay);
于 2012-06-01T15:00:32.903 に答える