Android Google Map API V2: Abrir ventana de información personalizada en el lado derecho del marcador

Tengo API Google MAP V2 integrada para Android. Quiero tener una ventana de información personalizada en Onclick de My Marker. Hasta que está bien. Lo he integrado

Lo que quiero: Quiero mostrar mi ventana de información personalizada en el lado derecho del marcador en lugar de la parte superior del marcador.

A continuación se muestra el código que estoy usando:

public class MainActivity extends FragmentActivity { private MainMapFragement mapFragment; private HashMap<Marker, EventInfo> eventMarkerMap; Marker ThirdMarker; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mapFragment = new MainMapFragement(); // FragmentTransaction ft = getFragmentManager().beginTransaction(); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.add(R.id.map, mapFragment); ft.commit(); } @Override protected void onStart() { super.onStart(); setUpEventSpots(); } private void setUpEventSpots() { // I'm going to make 2 EventInfo objects and place them on the map EventInfo firstEventInfo = new EventInfo(new LatLng(50.154, 4.35), "Right now - event", new Date(), "Party"); EventInfo secondEventInfo = new EventInfo(new LatLng(51.25, 4.15), "Future Event", new Date(1032, 5, 25), "Convention"); EventInfo thirdEventInfo = new EventInfo(new LatLng(23.25, 72.15), "Our Next Event", new Date(), "Ahmedabad-India"); // this date constructor is deprecated but it's just to make a simple // example Marker firstMarker = mapFragment.placeMarker(firstEventInfo); Marker secondMarker = mapFragment.placeMarker(secondEventInfo); ThirdMarker = mapFragment.placeMarker(thirdEventInfo); eventMarkerMap = new HashMap<Marker, EventInfo>(); eventMarkerMap.put(firstMarker, firstEventInfo); eventMarkerMap.put(secondMarker, secondEventInfo); eventMarkerMap.put(ThirdMarker, thirdEventInfo); // add the onClickInfoWindowListener mapFragment.getMap().setOnInfoWindowClickListener( new OnInfoWindowClickListener() { @Override public void onInfoWindowClick(Marker marker) { EventInfo eventInfo = eventMarkerMap.get(marker); Toast.makeText( getBaseContext(), "The date of " + eventInfo.getName() + " is " + eventInfo.getSomeDate() .toLocaleString(), Toast.LENGTH_LONG).show(); } }); // Custom Bhavesh mapFragment.getMap().setInfoWindowAdapter(new InfoWindowAdapter() { private final View window = getLayoutInflater().inflate( R.layout.ballonoverlly, null); @Override public View getInfoWindow(Marker marker) { EventInfo eventInfo = eventMarkerMap.get(marker); String title = marker.getTitle(); TextView txtTitle = ((TextView) window .findViewById(R.id.textview_name)); if (title != null) { // Spannable string allows us to edit the formatting of the // text. SpannableString titleText = new SpannableString(title); titleText.setSpan(new ForegroundColorSpan(Color.RED), 0, titleText.length(), 0); txtTitle.setText(titleText); } else { txtTitle.setText(""); } // TextView txtType = ((TextView) window // .findViewById(R.id.textview_aboutme)); // if (eventInfo.getType() != null) // txtType.setText(eventInfo.getType()); return window; } @Override public View getInfoContents(Marker marker) { // this method is not called if getInfoWindow(Marker) does not // return null return null; } }); } } 

Archivo xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RlMain" android:layout_width="wrap_content" android:layout_height="wrap_content" > <LinearLayout android:id="@+id/imageview_comment" android:layout_width="150dp" android:layout_height="62dp" android:background="@drawable/map_comment_back" android:gravity="center_vertical" android:orientation="vertical" android:scaleType="fitXY" android:visibility="visible" > <TextView android:id="@+id/textview_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:text="Bhavesh Patadiya" android:textColor="#FFFFFF" android:textStyle="bold" /> <TextView android:id="@+id/textview_aboutme" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:maxLines="2" android:text="How&apos;s Going?" android:textColor="#FFFFFF" android:textStyle="normal" /> </LinearLayout> </LinearLayout> 

A continuación se muestra la captura de pantalla de lo que estoy recibiendo: Introduzca aquí la descripción de la imagen

Ahora, quiero tener mi InfoWindow personalizada en el lado derecho del marcador en lugar de arriba.

Todas las ayudas son apreciadas.

Gracias por adelantado.

Editar 2:

A partir de la actualización de septiembre (v12 o 3.2.65) de la API de Google Maps v2 MarkerOptions.infoWindowAnchor se agregó. Hay bastantes nuevas funciones, por lo tanto, verifique las notas de lanzamiento también.

Editar 3:

Desafortunadamente esta adición no soluciona su problema todavía. Añadido nuevo tema para eso.


Esto no es posible actualmente.

Tratar de MapFragment colocando una View sobre MapFragment puede ser una buena solución si los usuarios no pueden mover el mapa. Si pueden, verán algunos retrasos negativos en el reposicionamiento cuando utilice "push techonology" onCameraChange o encuesta con Handler y map.getCameraPosition() .

Mismos problemas si intentas usar un marcador adicional con un icono transparente para mostrar la ventana de información cuando se hace clic en el visible, pero sería más divertido verlo realmente implementado.

Si puedes vivir sin ventana de información a la derecha por ahora, sugeriría protagonizar esta función ya solicitada y esperando.

Editar:

A partir de 3.1.36 (rev. 7) de la API v2 puede cambiar el icono del marcador. Esto significa que usted puede hacer dos iconos: uno normal, y otro que parece que tiene una ventana de información abierta a la derecha. Deshabilitar la apertura de la ventana de información por defecto y usar esto en su lugar podría funcionar para usted.

Usted puede hacer por simple convertir marker.getPosition () a screenPosition como debajo del código

 Projection projection = map.getProjection(); LatLng markerLocation = marker.getPosition(); Point screenPosition = projection.toScreenLocation(markerLocation); int x = screenPosition.x +marker. markerImage.getWidth(); 

Usted puede ref debajo del enlace para más información (que convierte getPosition a la proyección):

Cómo obtener coordenadas de pantalla de marcador en google maps v2 android

  • Diferencia entre getInfoWindow () y getInfoContents () en Googlemaps v2 para Android
  • Cómo agregar contenidoDescrito a InfoWindow o marcador en Android GoogleMaps V2 para TalkBack
  • Cómo agregar la ventana de información para el marcador de clustering en android?
  • Adaptador de ventana de información personalizada con datos personalizados en el mapa v2
  • Contenido dinámico en Maps V2 InfoWindow
  • Botón onclicklistener en infowindow en google map
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.