web-dev-qa-db-ja.com

Googleマップバージョン2でドロアブルのイメージをマーカーとして設定

コードのこの部分を使用して、Googleマップバージョン2のMapFragmentにマーカーを追加しています。

MarkerOptions op = new MarkerOptions();
op.position(point)
    .title(Location_ArrayList.get(j).getCity_name())
    .snippet(Location_ArrayList.get(j).getVenue_name())
    .draggable(true);
m = map.addMarker(op); 
markers.add(m);

ドロアブルとは異なる画像を使用したい。

51
NRahman

これは、DrawableMarkerとして設定する方法です。

BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.current_position_tennis_ball)

MarkerOptions markerOptions = new MarkerOptions().position(latLng)
         .title("Current Location")
         .snippet("Thinking of finding some thing...")
         .icon(icon);

mMarker = googleMap.addMarker(markerOptions);

VectorDrawablesおよびXMLベースDrawables do notこれで動作します。

118
Muhammad Babar

Drawableにも境界を設定する必要があるため、@ Lukas Novakの答えには何も表示されません。
これはすべてのドロアブルで機能します。以下に完全に機能する例を示します:

public void drawMarker() {
    Drawable circleDrawable = getResources().getDrawable(R.drawable.circle_shape);
    BitmapDescriptor markerIcon = getMarkerIconFromDrawable(circleDrawable);

    googleMap.addMarker(new MarkerOptions()
            .position(new LatLng(41.906991, 12.453360))
            .title("My Marker")
            .icon(markerIcon)
    );
}

private BitmapDescriptor getMarkerIconFromDrawable(Drawable drawable) {
    Canvas canvas = new Canvas();
    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    canvas.setBitmap(bitmap);
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
    drawable.draw(canvas);
    return BitmapDescriptorFactory.fromBitmap(bitmap);
}


circle_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="oval">
    <size Android:width="20dp" Android:height="20dp"/>
    <solid Android:color="#ff00ff"/>
</shape>
70
vovahost

Drawableをプログラムで作成した場合(そのためのリソースがないため)、これを使用できます。

Drawable d = ... // programatically create drawable
Canvas canvas = new Canvas();
Bitmap bitmap = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
d.draw(canvas);
BitmapDescriptor bd = BitmapDescriptorFactory.fromBitmap(bitmap);

次に、BitmapDescriptorがあり、MarkerOptionsに渡すことができます。

8
Lukas Novak