2012-08-24 9 views
21

La interfaz principal de mi aplicación es un visor donde el usuario simplemente desliza las páginas horizontalmente para acceder a las distintas páginas. Una de las páginas tiene una vista de mapa de Google (pegada a continuación). Mi problema es que si el usuario está en la página del mapa y usa un gesto de deslizamiento horizontal, la página se desliza a la página siguiente en lugar de desplazarse lateralmente hacia el mapa. Es como si el visor estuviera recibiendo el gesto antes del mapa.problema de gestos con la vista de mapa en la página viewpager

Si el usuario es listo y comienza a deslizar el mapa en una dirección diagonal o vertical, el mapa comienza a moverse y luego el gesto puede continuar horizontalmente. Pero preferiría mover el mapa en lugar de la página en un simple gesto de deslizamiento horizontal. La página siempre se puede deslizar usando la vista de texto.

¿Hay alguna manera de que esto pueda suceder?
gracias, 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> 

Respuesta

45

Por supuesto que es:

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

} 

Esto hará que el mapa ignorar todas las desliza dentro del mapa y solo se preocupan por las diapositivas/draggs fuera del mapa. Espero eso ayude. (Lo hago ahora mismo para una vista web con desplazamiento horizontal)

EDIT: Olvidé mencionar que en lugar de ViewPager necesita usar CustomViewPager en su diseño.

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

pongo a su clase en mi actividad principal .java archivo. Cambié el xml para llamar a com.deanblakely.CustomViewPager. Tiene tiempo de ejecución ClassNotFoundException com.deanblakely.CustomeViewPager. ¿Hay algo que olvidé hacer? (nuevo para Android y Java). –

+0

Bueno, esto se supone que debe estar en una clase separada. Necesita crear un nuevo archivo y poner este código. En este caso, si desea colocar "com.deanblakely.CustomViewPager", cree el archivo "CustomViewPager" en la carpeta "deanblakely" dentro de la carpeta "com". –

+0

Jorge. Sí, eso funcionó una vez que puse la clase en un archivo separado. Gracias. –

11

Si se utiliza Google Maps V2, utilice

scrollingView.getClass() getPackage() getName() startsWith ("mapas"). en canScroll método:...

@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 es maps.jb al utilizar mapas v2.

También en mi código, se utilizan estas clases:

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

scrollingView.getClass() es nulo todo el tiempo para mí, por lo que este error. – Justin

+1

¿tal vez 'scrollingView' es' null' o usa la clase 'ScrollingView' anónima? – ViliusK

+0

La documentación sobre 'Object.getClass()' no dice nada sobre casos cuando 'getClass' devuelve' null'. – ViliusK

Cuestiones relacionadas