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.
- Google Maps v2 android, ventana de información no se destacan en el color de resaltado por defecto en el clic?
- Cómo personalizar el color state_pressed de un infowindow en Google Maps?
- Crear una ventana de información personalizada en Google Maps V2
- Utilidades de mapas de Android Clustering show InfoWindow
- android marker custom infowindow
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's Going?" android:textColor="#FFFFFF" android:textStyle="normal" /> </LinearLayout> </LinearLayout>
A continuación se muestra la captura de pantalla de lo que estoy recibiendo:
Ahora, quiero tener mi InfoWindow personalizada en el lado derecho del marcador en lugar de arriba.
Todas las ayudas son apreciadas.
Gracias por adelantado.
- Cómo descartar una ventana de información en android Google mapa API v2
- Google Maps Android API v2 - Interactive InfoWindow (como en los mapas originales de google google)
- Cómo desplazarse ventanas de información en el mapa v2?
- Agregar una imagen de url a InfoWindow personalizado google maps v2
- Cambiar o quitar completamente el color de resaltado de un InfoWindow de Google Maps v2 en Android
- Apertura de InfoWindow automáticamente al agregar marcador Google Maps v2 Android
- Cambiar el color del margen de la vista InfoWindow del marcador en google maps api v2
- Cómo hacer que el contenido de la ventana de información del marcador haga clic en android
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
- Uso de Dagger para inyección de dependencia en constructores
- Android – Reproducción de mp3 desde byte