2012-08-24 15 views
21

L'interfaccia principale della mia app è un viewpager in cui l'utente scorre semplicemente le pagine orizzontalmente per raggiungere le varie pagine. Una delle pagine ha una mappa di google (incollata sotto). Il mio problema è che se l'utente si trova sulla pagina della mappa e usa un gesto di diapositiva orizzontale, la pagina scorre sulla pagina successiva anziché sulla mappa spostandosi lateralmente. È come se il viewpager stia facendo il gesto prima della mappa.problema di gesture con mapview in pagina viewpager

Se l'utente è intelligente e inizia a scorrere la mappa in direzione diagonale o verticale, la mappa inizia a spostarsi e quindi il gesto può continuare orizzontalmente. Ma preferirei spostare la mappa al posto della pagina su un semplice gesto di diapositiva orizzontale. La pagina può sempre essere fatta scorrere usando la textview.

C'è un modo per farlo accadere?
grazie, Gary

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/ContentPanel" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/tvMAP" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Map" 
    style="@style/bigtype" /> 


<com.google.android.maps.MapView 
    android:id="@+id/mapview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:apiKey="mykeygoeshere" 
    android:clickable="true" /> 

</LinearLayout> 

risposta

45

Naturalmente c'è:

public class CustomViewPager extends ViewPager { 

    public CustomViewPager(Context context) { 
     super(context); 
    } 

    public CustomViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { 
     if(v instanceof MapView){ 
      return true; 
     } 
     return super.canScroll(v, checkV, dx, x, y); 
    } 

} 

questo renderà la mappa ignorare tutte le diapositive all'interno della mappa e solo a cuore le diapositive/draggs al di fuori della mappa. Spero che sia d'aiuto. (Lo faccio adesso per una webview con scorrimento orizzontale)

MODIFICA: Ho dimenticato di menzionare che al posto di ViewPager è necessario utilizzare CustomViewPager nel layout di yout.

<com.yourpackage.CustomViewPager 
      android:id="@+id/viewpager" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
     /> 
+0

ho messo la classe in mia attività principale .java file. Ho cambiato l'xml per chiamare com.deanblakely.CustomViewPager. Ottenuto runtime ClassNotFoundException com.deanblakely.CustomeViewPager. C'è qualcosa che ho dimenticato di fare? (nuovo per Android e Java). –

+0

Beh, supponiamo di essere in una classe separata. Devi creare un nuovo file e inserire questo codice. In questo caso, se si desidera mettere "com.deanblakely.CustomViewPager", quindi creare il file "CustomViewPager" nella cartella "deanblakely" all'interno della cartella "com". –

+0

Jorge. Sì, ha funzionato una volta che ho messo la classe in un file separato. Grazie. –

11

Se l'utilizzo di Google Maps V2, utilizzare

scrollingView.getClass() getPackage() getName() startsWith ("mappe"). in canScroll metodo:...

@Override 
protected boolean canScroll(View scrollingView, boolean checkV, int dx, int x, int y) { 
    if (scrollingView.getClass().getPackage().getName().startsWith("maps.")) { 
     return true; 
    } 
    return super.canScroll(scrollingView, checkV, dx, x, y); 
} 

Becase scrollingView è maps.jb quando si utilizza v2 mappe.

anche nel mio codice, vengono utilizzate queste classi:

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
+0

scrollingView.getClass() è null ogni volta per me quindi questo errore. – Justin

+1

forse 'scrollingView' è' null' o usi la classe 'ScrollingView' anonima? – ViliusK

+0

La documentazione su 'Object.getClass()' non dice nulla sui casi in cui 'getClass' restituisce' null'. – ViliusK

Problemi correlati