在 Google 地图 v2 自定义标记中写入文本 - Android
Write text in Google Map v2 custom marker - Android
在我的地图中,我有一些标记列表,现在我需要实现如下输出
即带索引号的标记。
我已经搜索了 google 但没有得到任何解决方案,请帮助我想出一个实现这个的想法。
对于自定义标记:
- 您可以创建一个
custom image
和 draw
一个 index number
image
- 检查这个例子 custom marker
对于Marker Window
:
您可以创建包含 ImageView
和 TextViews
的自定义 xml
文件:
类似于 customMapView.xml
:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/white_full"
android:layout_width="match_parent"
android:padding="@dimen/padding_micro"
android:layout_height="match_parent">
<ImageView
android:id="@+id/img"
android:layout_gravity="left"
android:src="@drawable/ic_launcher"
android:textColor="@color/black_full"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:gravity="right"
android:id="@+id/name"
android:text="test"
android:textColor="@color/black_full"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<!-- Other TextViews or Whatever you want-->
</RelativeLayout>
初始化 Markers
后调用 setInfoWindowAdapter
并膨胀 your custom view
。类似于:
private void customizeMarkerInfoWindow(){
//Setting custom info window
mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
//Use default infoWindow frame
@Override
public View getInfoWindow(Marker marker) {
return null;
}
@Override
public View getInfoContents(Marker marker) {
// Getting view from the layout file
View view = mActivity.getLayoutInflater().inflate(R.layout.customMapView, null);
// Getting the position from the marker
LatLng latLng = marker.getPosition();
//UI elements
ImageView img = (TextView) view.findViewById(R.id.img);
TextView coord = (TextView) view.findViewById(R.id.name);
mukAdTv.setText(mukAd);
//You set the image here depending on how you want to set it, if you are downloading from internet you can use PICASSO for it and set it to img
//With picasso
Picasso.with(mActivity).load(YOUR_IMAGE_URL).into(img);
//From drawables
//img.setBackground(yourDrawable);
name.setText(latLng.latitude + ", " + latLng.longitude);
return view;
}
});
}
使用 Google 地图标记
随心所欲
我做了一个非常灵活和有趣的 hack 来实现你想要的任何类型的标记。
我做的是,
创建一个 XML 布局文件并按照您希望标记的显示方式对其进行设计。例如,在您的情况下,它将是一个带有 TextView 的绿色标记图像。
根据需要设置 TextView 的值。
将Layout文件转换成图片,得到BitmapDescriptor对象。
使用您刚刚创建的图像创建自定义标记。
与 Info Window 相比,这种视图的好处是您可以同时打开 window 多个标记。与 InfoWindow 一样,您一次只能为一个标记打开它。
代码示例
在我的地图中,我有一些标记列表,现在我需要实现如下输出
即带索引号的标记。
我已经搜索了 google 但没有得到任何解决方案,请帮助我想出一个实现这个的想法。
对于自定义标记:
- 您可以创建一个
custom image
和draw
一个index number
image
- 检查这个例子 custom marker
对于Marker Window
:
您可以创建包含 ImageView
和 TextViews
的自定义 xml
文件:
类似于 customMapView.xml
:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/white_full"
android:layout_width="match_parent"
android:padding="@dimen/padding_micro"
android:layout_height="match_parent">
<ImageView
android:id="@+id/img"
android:layout_gravity="left"
android:src="@drawable/ic_launcher"
android:textColor="@color/black_full"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:gravity="right"
android:id="@+id/name"
android:text="test"
android:textColor="@color/black_full"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<!-- Other TextViews or Whatever you want-->
</RelativeLayout>
初始化 Markers
后调用 setInfoWindowAdapter
并膨胀 your custom view
。类似于:
private void customizeMarkerInfoWindow(){
//Setting custom info window
mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
//Use default infoWindow frame
@Override
public View getInfoWindow(Marker marker) {
return null;
}
@Override
public View getInfoContents(Marker marker) {
// Getting view from the layout file
View view = mActivity.getLayoutInflater().inflate(R.layout.customMapView, null);
// Getting the position from the marker
LatLng latLng = marker.getPosition();
//UI elements
ImageView img = (TextView) view.findViewById(R.id.img);
TextView coord = (TextView) view.findViewById(R.id.name);
mukAdTv.setText(mukAd);
//You set the image here depending on how you want to set it, if you are downloading from internet you can use PICASSO for it and set it to img
//With picasso
Picasso.with(mActivity).load(YOUR_IMAGE_URL).into(img);
//From drawables
//img.setBackground(yourDrawable);
name.setText(latLng.latitude + ", " + latLng.longitude);
return view;
}
});
}
使用 Google 地图标记
随心所欲我做了一个非常灵活和有趣的 hack 来实现你想要的任何类型的标记。
我做的是,
创建一个 XML 布局文件并按照您希望标记的显示方式对其进行设计。例如,在您的情况下,它将是一个带有 TextView 的绿色标记图像。
根据需要设置 TextView 的值。
将Layout文件转换成图片,得到BitmapDescriptor对象。
使用您刚刚创建的图像创建自定义标记。
与 Info Window 相比,这种视图的好处是您可以同时打开 window 多个标记。与 InfoWindow 一样,您一次只能为一个标记打开它。