set androide del mapbox de la imagen de la demostración

en iOS, puede establecer fácilmente una llamada para sus marcadores llamando a:

[marker setCanShowCallout:YES]; [marker setRightCalloutAccessoryView:YOUR_BUTTON]; 

Pero no puedo encontrar esta funcionalidad para el Mapbox Android SDK. Tengo un oyente ahora que detecta toques en el calloutview pero cómo puedo fijar una imagen / botón de la leyenda?

 Marker marker = new Marker(p.getTitle(), p.getCatagoryName(), new LatLng(p.getLatitude(), p.getLongitude())); marker.setMarker(getResources().getDrawable(getResources().getIdentifier(string, "drawable", getActivity().getPackageName()))); mMapView.addMarker(marker); InfoWindow toolTip = marker.getToolTip(mMapView); View view = toolTip.getView(); // view.setBackgroundResource(R.drawable.callout_button); THIS DOES NOT WORK view.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { Log.e(TAG, "onTouch"); return true; } }); 

La excelente respuesta de ryansh requirió que incluyera TextViews con ids tooltip_title y tooltip_description en el diseño personalizado. También tuve que añadir un tercer tooltip_subdescription TextView. El código InfoWindow predeterminado asume que estas vistas existen y se bloquean si no lo hacen. Para más control extendí InfoWindow, overrode onOpen y podía utilizar cualquier disposición que quise para el tooltip. Para el createTooltip sobreescrito en la clase extendida de Marcador, naturalmente instancié y devolví mi objeto InfoWindow extendido.

Actualizar. A continuación, se muestra un ejemplo de ampliación del Marcador e InfoWindow para dar soporte a información sobre herramientas personalizada:

 public class MapboxMarker extends Marker { private MyInfoWindow mInfoWindow; public class MyInfoWindow extends InfoWindow { public MyInfoWindow(int layoutResId, MapView mapView) { super(layoutResId, mapView); } public void onOpen(Marker overlayItem) { // // Set data on mInfoWindow.getView() // } } public MapboxMarker(MapView mv, LatLng aLatLng, MapController mapController){ super(mv, "Title", "Description", aLatLng); } @Override protected InfoWindow createTooltip(MapView mv) { mInfoWindow = new MyInfoWindow(R.layout.custom_tooltip_layout, mv); return mInfoWindow; } } 

Tendrá que crear esta funcionalidad usted mismo, pero en realidad es bastante fácil de lograr mediante la definición de un marcador personalizado y la presentación de información sobre herramientas.

Comience por definir el diseño de la información de herramientas. Tiene que ser un RelativeLayout obviamente para posicionar la imagen de llamada. Establezca su contexto en cualquier actividad que esté creando los marcadores. El TipView en la parte inferior debe ser incluido, ya que controla el tamaño de la Tooltip personalizada.

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:background="@color/white" android:id="@+id/parent_layout" android:padding="5dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" tools:context="com.XXX.MainActivity"> <TextView android:id="@+id/tooltip_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/black" android:textSize="18sp" android:maxEms="17" android:layout_gravity="left" android:layout_weight="1" android:text="@string/toolTipTitle"/> <TextView android:id="@+id/tooltip_description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/black" android:textSize="14sp" android:maxEms="17" android:text="@string/toolTipDescription" android:layout_below="@+id/tooltip_title" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/marker_about" android:src="@drawable/ic_action_about" android:layout_toEndOf="@+id/tooltip_description" android:layout_toRightOf="@+id/tooltip_description" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:layout_marginLeft="10dp" /> <com.mapbox.mapboxsdk.views.TipView android:layout_width="132dp" android:layout_height="10dp"/> </RelativeLayout> 

A continuación, cree una clase de marcador personalizado y reemplace el método createTooltip para devolver un InfoWindow con el nuevo diseño:

 public class CustomMarker extends Marker { public CustomMarker(MapView mv, String aTitle, String aDescription, LatLng aLatLng){ super(mv, aTitle, aDescription, aLatLng); } @Override protected InfoWindow createTooltip(MapView mv) { return new InfoWindow(R.layout.custom_tooltip, mv); } } 

Esto no debería cambiar ninguna otra funcionalidad, por lo que el código que tiene todavía funcionará. Simplemente cambie el Marcador al nombre de la clase personalizada y debe establecerse.

EDIT: Aquí está el código que realmente establece el CustomMarker y InfoWindow con mi mapa. Usted puede ver que estoy lanzando otra actividad en el tecleo y que he fijado un icono de encargo para el marcador, pero esa materia no es necesaria:

  CustomMarker m = new CustomMarker(mv, report.issue, report.getFormattedDateString(), latLng); m.setIcon(new Icon(this, Icon.Size.LARGE, "oil-well", "FF0000")); //get the InfoWindow's view so that you can set a touch listener which will switch //to the marker's detailed view when clicked final InfoWindow infoWindow = m.getToolTip(mv); View view = infoWindow.getView(); view.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { //make sure to choose action down or up, otherwise the intent will launch twice if(motionEvent.getAction() == MotionEvent.ACTION_DOWN){ startActivity(intent); //close the InfoWindow so it's not still open when coming back to the map infoWindow.close(); } return true; } }); mv.addMarker(m); 

También estoy usando SDK 0.5.0-SNAPSHOT. No estoy seguro de si esto funcionará en versiones anteriores del SDK.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.