30

マップに追加したいマーカーのマーカー アイコンとしてシェイプ ドローアブルを追加しようとしています。

形状は次のようになります (res/drawable/blue_circle.xml):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    <size
        android:width="15dp"
        android:height="15dp" />
    <solid
        android:color="@color/Blue" />
</shape>

そして、次のようにマーカーを追加しようとします:

markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.blue_circle));

どうやら NullPointer 例外が発生したようです。

マーカー アイコンはビットマップである必要がありますか? 図形のドローアブルをマーカー アイコンとして追加することはできますか? はいの場合、私は何が間違っていますか?

4

3 に答える 3

39

マーカー用のドローアブルを作成します (res/drawable/map_dot_red.xml):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <gradient
        android:angle="90"
        android:endColor="#f58383"
        android:startColor="#ee6464" />

    <stroke
        android:width="1dp"
        android:color="#a13939" />

</shape>

ドローアブルからビットマップを作成します。

int px = getResources().getDimensionPixelSize(R.dimen.map_dot_marker_size);
mDotMarkerBitmap = Bitmap.createBitmap(px, px, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(mDotMarkerBitmap);
Drawable shape = getResources().getDrawable(R.drawable.map_dot_red);
shape.setBounds(0, 0, mDotMarkerBitmap.getWidth(), mDotMarkerBitmap.getHeight());
shape.draw(canvas);

ビットマップを使用してマーカーを作成します。

Marker marker = mMap.addMarker(new MarkerOptions()
    .position(point)
    .anchor(.5f, .5f)
    .icon(BitmapDescriptorFactory.fromBitmap(mDotMarkerBitmap)));

マーカーのサイズを次元で設定します (res/values/dimens.xml):

<resources>
    <dimen name="map_dot_marker_size">12dp</dimen>
</resources>
于 2013-10-02T11:32:51.330 に答える
3

com.google.maps.android:android-maps-utilsライブラリを使用している場合の答えは次のとおりです。

を使用してビットマップを作成しますIconGenerator

IconGenerator iconGen = new IconGenerator(context);

// Define the size you want from dimensions file
int shapeSize = getResources().getDimensionPixelSize(R.dimen.shape_size);

Drawable shapeDrawable = ResourcesCompat.getDrawable(getResources(), R.drawable.my_shape, null);
iconGen.setBackground(shapeDrawable);

// Create a view container to set the size
View view = new View(context);
view.setLayoutParams(new ViewGroup.LayoutParams(shapeSize, shapeSize));
iconGen.setContentView(view);

// Create the bitmap
Bitmap bitmap = iconGen.makeIcon();

次に、マーカーアイコンを設定するときと同じようにビットマップを使用しますBitmapDescriptorFactory.fromBitmap(bitmap)

于 2015-09-28T22:39:34.550 に答える