web-dev-qa-db-fra.com

Android Google Map API V2: Ouvrir la fenêtre d'informations personnalisées sur le côté droit du marqueur

J'ai intégré Google MAP API V2 pour Android. Je souhaite disposer d’une fenêtre d’informations personnalisées à l’Onclick de My Marker. Jusqu'à ça, c'est bien. je l'ai intégré. 

Ce que je veux: Je veux afficher ma fenêtre d'informations personnalisées sur le côté droit du marqueur au lieu du haut du marqueur.

Vous trouverez ci-dessous le code que j'utilise: 

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

}

fichier 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>

Ci-dessous, la capture d'écran de ce que je reçois: enter image description here

Maintenant, je veux avoir mon InfoWindow personnalisé sur le côté droit du marqueur au lieu de Haut. 

Toutes les aides sont appréciées. 

Merci d'avance.

27

Éditer 2:

À partir de septembre, la mise à jour (v12 ou 3.2.65) de l'API Google Maps Android v2 - MarkerOptions.infoWindowAnchor a été ajoutée. Il y a pas mal de nouvelles fonctions, donc vérifiez notes de version aussi.

Éditer 3:

Malheureusement, cet ajout ne résout pas encore votre problème. Ajouté nouveau numéro pour cela.


Ce n'est pas possible actuellement.

Essayer de le contourner en mettant une View sur MapFragment peut être une bonne solution si les utilisateurs ne sont pas autorisés à déplacer la carte. S'ils le peuvent, vous constaterez de mauvais décalages lors du repositionnement lorsque vous utilisez "Push techonology" onCameraChange ou interrogation avec Handler et map.getCameraPosition().

Même problème si vous essayez d’utiliser un marqueur supplémentaire avec une icône transparente pour afficher la fenêtre d’information lorsque vous cliquez sur le visible, mais il serait plus amusant de le voir réellement mis en œuvre.

Si vous pouvez vivre sans fenêtre d'information à droite pour le moment, je vous suggérerais de mettre en vedette cette fonctionnalité déjà demandée et d'attendre.

Modifier:

À partir de la version 3.1.36 (rév. 7) de l'API v2, vous pouvez modifier l'icône du marqueur. Cela signifie que vous pouvez créer deux icônes: l'une normale et l'autre qui ressemble à une fenêtre d'information ouverte à droite. Désactiver l'ouverture de la fenêtre d'informations par défaut et l'utiliser à la place pourrait fonctionner pour vous.

7
MaciejGórski

Vous pouvez faire en convertissant simplement marker.getPosition () en screenPosition comme ci-dessous code

Projection projection = map.getProjection();
LatLng markerLocation = marker.getPosition();
Point screenPosition = projection.toScreenLocation(markerLocation);

int x = screenPosition.x +marker. markerImage.getWidth();

Vous pouvez consulter le lien ci-dessous pour plus d'informations (qui convertissent getPosition en projection):

Comment obtenir les coordonnées de l'écran du marqueur dans Google Maps v2 Android

0
javid piprani