2015-11-19 9 views
6

Ho un codice che aggiunge una vista di callout di annotazione personalizzata da visualizzare ogni volta che viene selezionata un'annotazione la mia vista mappa Skobbler.Vista immagine di Skobbler callout coda visualizzata in modo errato Android SDK 2.5.1

@Override 
public void onAnnotationSelected(final SKAnnotation annotation) { 
    ... 
    mapPopup = mapHolder.getCalloutView(); 
    // set the callout view’s background color 
    mapPopup.setViewColor(Color.WHITE); 
    View view = getLayoutInflater().inflate(R.layout.map_callout, null); 
    ... 
    mapPopup.setCustomView(view); 
    // setting 2nd parameter to 'true' will cause tail to be displayed 
    mapPopup.showAtLocation(annotation.getLocation(), true); 
    ... 
} 

Chiedo anche nel showAtLocation() chiamata che la vista di dettaglio visualizzato con l'imageview "coda". Tuttavia, quando eseguo il test nell'app, vedo che la coda appare nella parte superiore del mio contenitore RelativeLayout map_surface_holder invece che nella parte inferiore del contenitore FrameLayout che visualizza la vista popup del callout.

Image showing incorrectly positioned tail image view

Quando panoramica della mappa, posso vedere che la vista della coda si sposta a sinistra ea destra rispetto al movimento della vista di dettaglio, ma rimane allineato alla parte superiore del contenitore map_surface_holder, mai salendo o verso il basso.

Devo aggiungere qualche codice da qualche parte per rendere la vista dell'immagine di coda consapevole di dove dovrebbe essere posizionata nella direzione dell'asse y del contenitore RelativeLayout?

Ho provato ad aggiungere una chiamata a mapPopup.setVerticalOffset(offset) per vedere se ciò ha avuto alcun effetto, ma l'immagine di coda è rimasta bloccata nella parte superiore dello schermo.

Un'altra differenza che ho potuto vedere tra la mia vista di callout personalizzata e quella di default fornita da Skobbler è che la vista standard è un contenitore RelativeLayout mentre la mia implementazione è un FrameLayout. Tuttavia, non sono sicuro che dovrebbe essere importante dal momento che Tail ImageView viene aggiunto al genitore della vista callout, non da bambino.

Grazie in anticipo per qualsiasi aiuto in merito, e fatemi sapere se eventuali dettagli aggiuntivi sarebbero utili.

Grazie!

+0

stiamo cercando in esso – SylviA

+0

Si prega di verificare se la soluzione fornita sul il forum risolve il problema: http://forum.skobbler.com/showthread.php/7210-SKCalloutView-positioning-not-synchronised-with-map?p=21472#post21472 – SylviA

risposta

0

Abbiamo provato a riprodurre il problema sia con 2.5.1 che con 3.X - ma non ci è stato possibile.

Ecco il codice che abbiamo usato:

//MapActivity 
    @Override 
    onCreate(Bundle savedInstanceState) 
    { 
    … 
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    mapPopup = mapViewGroup.getCalloutView(); 
    View view = inflater.inflate(R.layout.layout_popup, null); 
    popupTitleView = (TextView) view.findViewById(R.id.top_text); 
    popupDescriptionView = (TextView) view.findViewById(R.id.bottom_text); 
    mapPopup.setCustomView(view); 
    … 
    } 

@Override 
public void onAnnotationSelected(final SKAnnotation annotation) { 
    if (navigationUI.getVisibility() == View.VISIBLE) { 
     return; 
    } 
    // show the popup at the proper position when selecting an 
    // annotation 
    int annotationHeight = 0; 
    float annotationOffset = annotation.getOffset().getY(); 
    switch (annotation.getUniqueID()) { 
     case 10: 
      annotationHeight =(int) (64 * getResources().getDisplayMetrics().density); 
      popupTitleView.setText("Annotation using texture ID "); 
      popupDescriptionView.setText(null); 
      break; 
     case 11: 
      annotationHeight = customView.getHeight(); 
      popupTitleView.setText("Annotation using custom view"); 
      popupDescriptionView.setText(null); 
      break; 
    } 
    mapPopup.setVerticalOffset(-annotationOffset + annotationHeight/2); 
    mapPopup.showAtLocation(annotation.getLocation(), true); 
} 

//layout_popup.xml

<ImageView 
    android:id="@+id/left_image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_centerVertical="true" 
    android:clickable="true" 
    android:padding="5dp" 
    android:src="@drawable/icon_map_popup_navigate" /> 

<LinearLayout 
    android:id="@+id/mid_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_toRightOf="@id/left_image" 
    android:orientation="vertical" 
    android:paddingBottom="5dp" 
    android:paddingRight="5dp" 
    android:paddingTop="5dp" 
    android:weightSum="1" > 

    <TextView 
     android:id="@+id/top_text" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:text="Title text" 
     android:textColor="@color/black" 
     android:textSize="18dp" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/bottom_text" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:linksClickable="true" 
     android:text="Subtitle text" 
     android:textColor="@color/black" 
     android:textSize="14dp" /> 
</LinearLayout> 

Problemi correlati