私はこの投稿を思いつきましたが、それは非推奨のGoogle Maps API向けです
http://tech.truliablog.com/2012/02/23/custom-map-markers-for-Android-google-maps/
新しいAPIでは、これを行う簡単な方法を見つけることができませんでした。実際、全然できませんでした。
基本的に、テキストの背景として9Patchドローアブルを使用して、TextViewをマーカーとしてマップに配置したいと考えています。 Truliaは、現在のアプリで新しいAPI v2を使用してまだそれを行っています。ここで確認できます
これどうやってするの?
Chris Broadfoot は、まさにそれを行うユーティリティライブラリを作成しました。
ライブラリはここから入手できます: https://github.com/googlemaps/Android-maps-utils
この短い動画もご覧ください: http://www.youtube.com/watch?v=nb2X9IjjZpM
これは、グーグルが提供するこの便利なライブラリを使用して簡単に実現できます。
IconGenerator icg = new IconGenerator(this);
icg.setColor(Color.GREEN); // green background
icg.setTextAppearance(R.style.BlackText); // black text
Bitmap bm = icg.makeIcon("200 mi");
Style.xml内
<style name="BlackText" parent="TextDefault">
<item name="Android:textColor">@color/black</item>
</style>
http://googlemaps.github.io/Android-maps-utils/javadoc/
http://googlemaps.github.io/Android-maps-utils/
https://github.com/googlemaps/Android-maps-utils
this linkからプロジェクトの上部リンクを設定できます
私の知る限り、これは現在google maps api v2ではサポートされていません。一方、できることは、マーカーのビットマップを動的に作成し、そこに表示する値を書き込むことです。悲しいかな、たまたまピンがたくさんあると、パフォーマンスの問題が発生しやすくなります。
Canvas canvas = new Canvas(bitmap);
canvas.drawText("Your text", textXOffset, textYOffset, mPictoPaint);
MarkerOptions options = new MarkerOptions().position([…]).icon(BitmapDescriptorFactory.fromBitmap(bitmapResult));
Marker newMarker = map.addMarker(options);
bitmap
は変更可能である必要があることに注意してください。また、必要に応じて(おそらく9.patchを使用して)ベースイメージをスケーリングする必要があります。
Googleのサンプルコード を参照して
IconGenerator iconFactory = new IconGenerator(this);
iconFactory.setColor(Color.CYAN);
addIcon(mMap, iconFactory, "Custom color", new LatLng(-33.9360, 151.2070));
addIcon()メソッドはこちら:
private void addIcon(GoogleMap googleMap, IconGenerator iconFactory, CharSequence text, LatLng position) {
MarkerOptions markerOptions = new MarkerOptions().
icon(BitmapDescriptorFactory.fromBitmap(iconFactory.makeIcon(text))).
position(position).
anchor(iconFactory.getAnchorU(), iconFactory.getAnchorV());
googleMap.addMarker(markerOptions);
}
私はこの質問が古いことを知っていますが、誰かを助けるためにここに私の回答を投稿します。
上記の解決策のどれも私のために働いていませんでした
アプリにマーカーのカスタムアイコンがすでにあります
私のアプリは潜在的に数千の異なるマーカータイトルを表示するため、メモリ内に多くの画像を作成するとパフォーマンスの問題になります
マーカーアイコンが大きくなると、マップはすぐに判読できなくなります
私はインターネットで解決策を見つけられなかったので、私は私の袖をまくり上げて、私の問題を解決するこのライブラリを作成しました、うまくいけばそれは他の人にも役立つでしょう:
https://github.com/androidseb/Android-google-maps-floating-marker-titles
これがどのように機能するかのプレビューです:
Clusters
を使用すると、動作が少し異なります。
https://medium.com/@yilmazvolkan/custom-map-marker-8b136212d766 を見て、ここに書いた。
styles.xml:
<!-- Google Maps marker -->
<style name="MarkerText">
<item name="Android:textSize">12sp</item>
<item name="Android:textColor">#f0f0f0</item>
</style>
marker_bg.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle"
>
<solid Android:color="#3232a0" />
<corners Android:radius="18dp" />
</shape>
断片:
private var clusterManager: ClusterManager<SomeClusterItem>? = null
private var clusterRenderer: MarkerClusterRenderer<SomeClusterItem>? = null
private var unselectedBitmap: BitmapDescriptor? = null
private var iconGenerator: IconGenerator? = null
private var selectedItem: SomeClusterItem? = null
override fun onMapReady(googleMap: GoogleMap) {
this.googleMap = googleMap
...
unselectedBitmap =
BitmapUtils.bitmapDescriptorFromVector(context!!, R.drawable.unselected_item)
// Create a text marker background.
iconGenerator = IconGenerator(context!!)
iconGenerator!!.setTextAppearance(R.style.MarkerText)
val markerBackground = ContextCompat.getDrawable(context!!, R.drawable.marker_bg)
iconGenerator!!.setBackground(markerBackground)
clusterManager = ClusterManager(context!!, googleMap)
clusterRenderer = MarkerClusterRenderer(context!!, googleMap, clusterManager!!,
unselectedBitmap!!)
clusterManager!!.renderer = clusterRenderer
...
// Create a list of markers.
val boundsBuilder = LatLngBounds.Builder()
...
// Show clusters and markers.
clusterManager!!.cluster()
clusterManager!!.setOnClusterItemClickListener { item ->
// Deselect selected marker.
// See https://stackoverflow.com/a/53829888/2914140.
if (selectedItem != null) {
deselectMarker(selectedItem)
}
selectedItem = item
selectMarker(selectedItem!!, iconGenerator)
// Show info window. See GoogleMap.InfoWindowAdapter.
false
}
clusterRenderer.setOnClusterClickListener {
deselectMarker(selectedItem)
true
}
private fun selectMarker(item: SomeClusterItem,
iconGenerator: IconGenerator) {
// Generate a text marker.
val icon = iconGenerator.makeIcon(item.title)
val bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(icon)
clusterRenderer?.getMarker(item)?.setIcon(bitmapDescriptor)
}
private fun deselectMarker(item: SomeClusterItem?) =
clusterRenderer?.getMarker(item)?.setIcon(unselectedBitmap)
次に、これらの画像が表示されます(すべてのアイテムが選択されているわけではなく、1つのアイテムが選択されています)。
InfoWindowが表示されていることに注意してください。情報ウィンドウをカスタマイズするには、 https://stackoverflow.com/a/59952706/291414 を参照してください。
情報ウィンドウを削除するには、適切なメソッドでtrue
を返すだけです( Android google maps API v2)でマーカー情報ウィンドウを非表示にする を参照)。
clusterManager!!.setOnClusterItemClickListener { item ->
...
true
}