trazar - infowindowadapter example android
Android Google Map API V2: abra la ventana de informaciĆ³n personalizada en el lado derecho de Marker (2)
Tengo integrada Google MAP API V2 para Android. Quiero tener una ventana de información personalizada en Onclick of My Marker. Hasta eso 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 está 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 la parte superior.
Todas las ayudas son apreciadas.
Gracias por adelantado.
Puedes hacer con simple conversion marker.getPosition () a screenPosition como código debajo
Projection projection = map.getProjection();
LatLng markerLocation = marker.getPosition();
Point screenPosition = projection.toScreenLocation(markerLocation);
int x = screenPosition.x +marker. markerImage.getWidth();
Puede consultar el enlace a continuación para obtener más información (que convierte la posición get en proyección):
Cómo obtener las coordenadas de la pantalla del marcador en google maps v2 android
Editar 2:
A partir de la actualización de septiembre (v12 o 3.2.65) de Google Maps Android API v2 se agregó MarkerOptions.infoWindowAnchor . Hay bastantes funciones nuevas, así que también consulte las notas de la versión .
Editar 3:
Desafortunadamente, esta adición aún no resuelve tu problema. Se agregó un nuevo problema para eso.
Esto no es posible actualmente.
Intentar solucionarlo colocando una View
sobre MapFragment
puede ser una buena solución si los usuarios no pueden mover el mapa. Si pueden, verán algunos rezagos en el reposicionamiento cuando utilicen "tecnología push" onCameraChange
o onCameraChange
con Handler
y map.getCameraPosition()
.
Los mismos problemas si intenta usar un marcador adicional con un ícono transparente para mostrar la ventana de información cuando se hace clic en el visible, pero sería más divertido ver que realmente se implementó.
Si puede vivir sin la ventana de información a la derecha por el momento, le sugiero que marque esta característica ya solicitada y esperando.
Editar:
A partir del 3.1.36 (rev.7) de la API v2, puede cambiar el ícono del marcador. Esto significa que puede hacer dos iconos: uno normal y otro que parece que tiene una ventana de información abierta a la derecha. Desactivar la apertura de la ventana de información predeterminada y usar esto en su lugar podría funcionar para usted.