2014-02-11 4 views
4

Можно ли определить в папке «Макеты» (Android) XML-файл, где я укажу, как будет выглядеть мой указатель/маркер? Например, я хотел бы иметь изображение и TextView как маркер (а не всплывающее окно, а сам маркер).Маркер Google Maps, определенный в макете XML

Я использую Google Maps Library утилиты использовать Кластеры на Google Maps, но они просто есть примеры, как это сделать, используя обычный белый маркер с фоном (example)

Позволяет сказать, что я хочу точно, что делать они есть, кроме белой доски.

Вы знаете, как я могу это сделать?

Заранее спасибо.

EDIT:

Я пытаюсь объединить this tutorial с Maps Library Utility Google (кластеры). На данный момент у меня есть, но не работает:

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; 
     } 
} 
+0

Вы получаете шанс решить эту проблему? если да, то как? Аналогичная проблема: http://stackoverflow.com/questions/25965799/xml-layout-to-map-marker – TheDevMan

+0

HI, если вы решили эту проблему, любезно помогите мне. Я столкнулся с такой же проблемой. Я хочу отображать динамический контент, например номера на значках маркеров карты, с разными цветами. –

+0

код фрагмента выглядит хорошо, но createDrawableFromView написано неправильно, вы не установили view.setDrawingCacheEnabled (true) http://developer.android.com/reference/android/view/View.html#setDrawingCacheEnabled(boolean) выглядит следующим образом http://stackoverflow.com/questions/2339429/android-view-getdrawingcache-returns-null-only-null/4618030#4618030 – 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

+0

Мне тоже понравился бы ответ. Когда я использую макет, он пуст. Я хочу изменить цвета фона на основе типа маркера. Статическое изображение не разрешит его. И я не делаю несколько наборов значков, чтобы выполнить это. – KickingLettuce

+0

У вас был шанс решить эту проблему? если да, то как? Аналогичная проблема: http://www.stackoverflow.com/questions/25965799/xml-layout-to-map-marker – TheDevMan

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))); 
} 
+0

Это не проблема в уже созданном маркере, а в методе (createDrawableFromView), который рисует View – horkavlna

Смежные вопросы