66

カスタム マーカーを使用してマップを作成したいと考えています。API v2 では、マーカーのアイコン、タイトルなどを設定できます。しかし、最初の開始時にマーカー付きのタイトルを表示したい。マーカーをテーピングしたときにのみタイトルが表示されるようになりました。v1 ではオーバーレイがありましたが、v2 では同様のものは見つかりませんでした。

編集済み: 多分私は十分に明確ではありませんでした. Marker.showInfoWindow()API のようなものは、1 つのマーカーに対してのみ機能します。すべてのマーカーの情報ウィンドウを同時に表示できません。とにかく、ユーザーがタップするまで待たずに、すべてのマーカーのタイトルを表示する必要があります。

4

9 に答える 9

84

私もこの問題に遭遇しました。V2 APIは一歩前進し、2歩後退します。Googleの場合、MarkerクラスまたはGoogleMapクラスにオーバーライド可能な'draw'メソッドを追加して、自分で描画をカスタマイズできるようにしてください。

考えられる解決策は、ビットマップをその場で生成し、それをマーカーに添付することです。つまり、キャンバスを作成し、マーカービットマップを挿入し、マーカーの横にテキストを描画します。これには、いくつかの面倒な計算が含まれます(マーカービットマップとテキストが隣り合った適切なキャンバスサイズ)。残念ながら、MarkerにはsetIconメソッドがないため、テキストが変更されるたびに、新しいマーカーを作成する必要があります。マップ上にマーカーがあるだけで問題ない場合もありますが、マーカーが数十個ある場合、これは実行できない可能性があります。また、これらのビットマップを動的に作成する際にメモリの問題が発生する可能性があります。サンプルコード(テキストのみ):

Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
Bitmap bmp = Bitmap.createBitmap(200, 50, conf); 
Canvas canvas = new Canvas(bmp);

canvas.drawText("TEXT", 0, 50, paint); // paint defines the text color, stroke width, size
mMap.addMarker(new MarkerOptions()
                                .position(clickedPosition)
                                //.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker2))
                                .icon(BitmapDescriptorFactory.fromBitmap(bmp))
                                .anchor(0.5f, 1)
                                    );

うまくいけば、Googleが適切なメソッドを追加して、これを簡単に実行できるようにします。くそー、私はV2APIの新しいマップ回転機能が本当に好きです。

于 2012-12-14T18:01:56.987 に答える
16

あなたの質問は、Google I/O セッションで最終的に回答されたようです。

http://googlemaps.github.io/android-maps-utils/をご覧ください

それは持っています:

マーカー クラスタリング — 多数の点の表示を処理します

ヒート マップ — 多数の点をヒート マップとして表示する

IconGenerator — マーカーにテキストを表示します (スクリーンショットを参照)

ライブラリを使用して作成されたマーカー

非常に重要なのは、どのスレッドでも変更できるため、多くのマーカーを簡単に処理できることです

于 2014-11-23T16:19:20.267 に答える
9

どちらを達成しようとしているのかわかりません。ユーザーがマーカーをタップせずに情報ウィンドウを表示するか、情報ウィンドウにまったく異なるビューを使用するか(または両方)。

ユーザーをタップせずに情報ウィンドウを表示するには:

私はこれを自分でテストしていませんが、Marker.showInfoWindow()でうまくいくと思います(マーカーの可視性がすでにあると仮定します) true

インフォウィンドウのカスタムビューを提供するには

ここには2つのオプションがあり、GoogleMap.InfoWindowAdapterのドキュメントを参照する必要があります。

パブリック静的インターフェースGoogleMap.InfoWindowAdapter

info-windowsのカスタマイズされたレンダリングのためのビューを提供します。

このプロバイダーのメソッドは、原因(ユーザージェスチャまたはshowInfoWindow()のプログラムによる呼び出し)に関係なく、マーカーの情報ウィンドウを表示するときに呼び出されます。一度に表示される情報ウィンドウは1つだけなので、このプロバイダーは、ビューを再利用することを選択することも、メソッド呼び出しごとに新しいビューを作成することを選択することもできます。

情報ウィンドウを作成する場合、このクラスのメソッドは定義された順序で呼び出されます。デフォルトの情報ウィンドウを置き換えるには、getInfoWindow(Marker)をカスタムレンダリングでオーバーライドします。情報ウィンドウの内容だけを置き換えるには、デフォルトの情報ウィンドウフレーム(コールアウトバブル)内で、getInfoWindow(Marker)のデフォルトの実装をそのままにして、代わりにgetInfoContents(Marker)をオーバーライドします。

基本的に、オーバーライドするgetInfoWindow()getInfoContents()どうかは、コールアウトバブル内に表示される内容をカスタマイズするかどうか、またはコールアウトバブルの代替を含む情報ウィンドウビュー全体をカスタマイズするかどうかによって異なります。

注意点:これらのメソッドをオーバーライドすると、その時点でのビューの外観getInfoWindow()またはgetInfoContents()呼び出されたビューの単純なレンダリングが実行されると思います。私自身、場所の名前の横に小さな「方向」アイコンがあるネイティブのGoogleMapsAndroidアプリの外観を再現することに興味があります。私が信じている問題の1つ(ここを参照:https ://stackoverflow.com/a/13713536/129475 )は、ビューにボタンのようなものがある場合、静的レンダリングのためにボタンのように動作しない可能性があることです。

于 2012-12-11T02:45:21.103 に答える
4

マーカー画像をカスタマイズする

デフォルトのマーカー イメージを、アイコンと呼ばれるカスタム マーカー イメージに置き換えることができます。カスタム アイコンは常に BitmapDescriptor として設定され、BitmapDescriptorFactory クラスの 4 つのメソッドのいずれかを使用して定義されます。

fromAsset(String assetName) assets ディレクトリの画像を使用してカスタム マーカーを作成します。

fromBitmap (ビットマップ イメージ) ビットマップ イメージからカスタム マーカーを作成します。

fromFile (文字列パス) 指定されたパスにあるファイルからカスタム アイコンを作成します。

fromResource (int resourceId) 既存のリソースを使用してカスタム マーカーを作成します。以下のスニペットは、カスタム アイコンでマーカーを作成します。

 private static final LatLng MELBOURNE = new LatLng(-37.813, 144.962);
 private Marker melbourne = mMap.addMarker(new MarkerOptions()
                        .position(MELBOURNE)
                        .title("Melbourne")
                        .snippet("Population: 4,137,400")
                        .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)));
于 2015-01-12T12:49:56.387 に答える
2

この単純なコードは、クリック イベントを必要とせずにタイトルを表示します。

googleMap.addMarker(new MarkerOptions()
        .position(latLng)
        .title(String title))
        .showInfoWindow();
于 2013-01-18T04:13:46.337 に答える
0

マーカーの配列を保持しないのはなぜですか。その後、マーカーの読み込みに関しては、呼び出しを繰り返しますshowInfoWindow()。最もエレガントなソリューションではないかもしれませんが、あなたが言っていることはうまくいくと思います。

于 2012-12-13T10:21:20.637 に答える
-6

以下の詳細を持つ画像エディターで独自のマーカーを作成することで、この問題を解決しました。作るのに少し時間がかかりましたが、うまくいきました。

Photoshop と 53x110px のマーカーを使用しました。

私が作ったサンプルマーカー

于 2013-01-24T04:07:51.307 に答える