Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

google maps marker defined in layout XML

Is it possible to define in Layouts folder (Android) an XML file where i specify how my pointer/marker will look like? For example, i would like to have an image and a TextView as Marker (not the popup, but the marker itself).

I have been using Google Maps Utility Library to use Clusters on Google Maps, but they just have examples how to do it using the normal white marker with background (example)

Lets say that i want exactly what do they have, except the white board around.

Do you know how can i accomplish this?

Thanks in advance.

EDIT:

I'm trying to combine this tutorial with Google Maps Utility Library (Clusters). For now i have this, but is not working:

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;
        }
}
like image 758
Bugdr0id Avatar asked Nov 10 '22 13:11

Bugdr0id


1 Answers

You probably already have added Marker in your map, so try use Marker instead of 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)));   
}
like image 86
RediOne1 Avatar answered Nov 14 '22 21:11

RediOne1