在布局XML中定义谷歌地图标记

5

在Android的Layouts文件夹中,是否可以定义一个XML文件,以指定我的指针/标记的外观? 例如,我想要一个图像和一个TextView作为标记(不是弹出窗口,而是标记本身)。

我一直在使用Google地图实用程序库来在Google Maps上使用Clusters,但它们只有使用带有背景的普通白色标记的示例(example)。

假设我想要完全像他们一样的东西,除了白色框以外。

您知道我该如何实现这一点吗?

提前感谢。

编辑:

我正在尝试将 this tutorial 与Google地图实用程序库(Clusters)结合使用。 目前我有这个,但它不起作用:

custom_cluster_marker_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="55dp"
        android:layout_height="65dp"
        android:src="@drawable/cluster" />

    <TextView
        android:id="@+id/num_txt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="19dp"
        android:layout_marginTop="10dp"
        android:gravity="center"
        android:text="0"
        android:textColor="#ce8223"
        android:textSize="25dp"
        android:textStyle="bold" />

</RelativeLayout>

MeterRender.java

private class MeterRenderer extends DefaultClusterRenderer<MyMeter> {


        private TextView mClusterTextView;

        public MeterRenderer() {
            super(c, map, mClusterManager);

            View custom_cluster_view = ((LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_cluster_marker_layout, null);
            mClusterTextView = (TextView) custom_cluster_view.findViewById(R.id.num_txt);
        }

        @Override
        protected void onBeforeClusterItemRendered(MyMeter meter, MarkerOptions markerOptions) {

            markerOptions.icon(BitmapDescriptorFactory
                    .fromPath(createBillboardTexture("a", "123")));
        }

        @Override
        protected void onBeforeClusterRendered(Cluster<MyMeter> cluster, MarkerOptions markerOptions) {
            View custom_cluster_view = ((LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_cluster_marker_layout, null);
            mClusterTextView = (TextView) custom_cluster_view.findViewById(R.id.num_txt);
            mClusterTextView.setText(cluster.getSize());
            markerOptions.icon(BitmapDescriptorFactory.fromBitmap(createDrawableFromView(c, custom_cluster_view)));


        }

        public Bitmap createDrawableFromView(Context context, View view) {
            DisplayMetrics displayMetrics = new DisplayMetrics();
            ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

            view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
            view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
            view.buildDrawingCache();
            Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

            Canvas canvas = new Canvas(bitmap);
            view.draw(canvas);

            return bitmap;
        }
}

你有机会解决这个问题了吗?如果是的话,你是怎么解决的?我有类似的问题:http://stackoverflow.com/questions/25965799/xml-layout-to-map-marker - TheDevMan
你好,如果你已经解决了这个问题,请帮助我。我也遇到了同样的问题。我想在地图标记图标上显示不同颜色的动态内容,例如数字。 - shyam.y
代码段看起来不错,但createDrawableFromView写错了,你没有设置view.setDrawingCacheEnabled(true)。看看这个评论:https://dev59.com/UHE95IYBdhLWcg3wXsyR#4618030。同时参考一下这个链接http://developer.android.com/reference/android/view/View.html#setDrawingCacheEnabled(boolean)。 - horkavlna
2个回答

1

你可能已经在地图中添加了Marker,所以尝试使用Marker而不是MarkerOptions

@Override
protected void onBeforeClusterItemRendered(MyMeter meter, Marker marker) {

    marker.setIcon(BitmapDescriptorFactory
                    .fromPath(createBillboardTexture("a", "123")));
}

@Override
protected void onBeforeClusterRendered(Cluster<MyMeter> cluster, Marker marker) {
    View custom_cluster_view = ((LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_cluster_marker_layout, null);
    mClusterTextView = (TextView) custom_cluster_view.findViewById(R.id.num_txt);
    mClusterTextView.setText(cluster.getSize());
    marker.setIcon(BitmapDescriptorFactory.fromBitmap(createDrawableFromView(c, custom_cluster_view)));   
}

问题不在已创建的标记中,而在于绘制视图的方法(createDrawableFromView)。 - horkavlna

0

您可以使用自己的图像作为标记。您可以从源中加载图标。

fromAsset(String assetName) – Loading from assets folder
fromBitmap (Bitmap image) – Loading bitmap image
fromFile (String path) – Loading from file
fromResource (int resourceId) – Loading from drawable resource

// create marker
MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Hello Maps");

// Changing marker icon
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.my_marker_icon)));

// adding marker
googleMap.addMarker(marker);

3
我知道如何定义自己的图标,但这个问题与此不同。对我来说主要的问题是,我希望在这个图标/标记上有动态信息,因此我想要在Layout.xml中定义一些内容,以便能够访问其中的TextView(例如),并在需要时随时更改它。 - Bugdr0id
我也想得到一个答案。当我使用布局时,它是空白的。我想根据标记类型改变背景颜色。静态图像不够用。而且我不会制作多组图标来完成这个任务。 - TheLettuceMaster
你有机会解决这个问题了吗?如果是这样,你是如何解决的?我有类似的问题:http://www.stackoverflow.com/questions/25965799/xml-layout-to-map-marker - TheDevMan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接