2012-05-13 8 views
6

Estoy usando un ViewPager con un PageAdapter (del paquete de compatibilidad v4) para deslizarme entre una lista horizontal de cuadros. El problema es que mi segundo cuadro de la primera página es el primer cuadro en la segunda página (visual y conceptual). Algo como esto:Pase la mitad de la página en un ViewPager (del paquete de compatibilidad)

enter image description here

La forma en que estoy haciendo ahora funciona. Sin embargo, esto se vuelve un poco raro porque en el medio del deslizamiento hay una situación en la que el mismo cuadro aparece dos veces (como se muestra en la imagen).

¿Hay una manera de deslizar solo la "mitad" de la página?

EDIT:

Las cajas son una abstracción. De hecho, cada cuadro es un ListView y creo páginas diferentes simplemente cambiando el adaptador de cada ListView.

Respuesta

26
  1. Crear un fragmento por página
  2. Anulación getPageWidth() en PageAdapter para mostrar más de una página

Código:

@Override 
public float getPageWidth(int position) { 
    float nbPages = 2; // You could display partial pages using a float value 
    return (1/nbPages); 
} 
+0

¡Esta debería ser la respuesta aceptada! ¡Muchas gracias! –

+0

Lo cambié, lo siento por el "retraso" :) –

+0

¡perfecto! funciona bien para mí entrando en más detalles, el valor predeterminado para getPageWidth es 1f (es decir, el 100% del área de la pantalla). Entonces puedes establecer '1/(no_of pages_per_screen_you_want)' –

2

Sí, use el ancho del elemento secundario como la mitad de la página. Por lo tanto, al deslizar, que llama al siguiente niño, deslizará la mitad de la página. ¡Buena suerte!

Editar: Comprobado su boceto de nuevo, intente implementar 1st, 2nd, 3rd ... como niños diferentes. (Predigo la mayor parte de la solución al tiempo que asume que va a reaccionar como GalleryView)

+0

Las cajas son una simplificación. En realidad, cada cuadro es un "ListView" y cada "cuadro" tiene un adaptador. En cualquier caso, ¿cómo puedo establecer el ancho del elemento secundario como la mitad de la página? –

+0

@TiagoAlmeida. Resulta que los hijos de ViewPager siempre llenan los límites internos de ViewPager. Por lo tanto, resolví el problema a través de un pequeño truco. Aquí está el código fuente https://github.com/MonkeyPerformingCodingAction/ViewPagerMultipleChildTrick –

+0

Ya vi su código. Gracias. Sin embargo, es un poco problemático: p (puedes deslizar solo un lado, un poco complicado, tal vez no explique mi problema ¿verdad?). Quiero poder hacer swype como lo hago ahora, pero quiero algo así como una superposición de las 2 páginas cuando estoy deslizando. De la forma en que lo hiciste, tienes 2 zonas en las que puedes deslizarte. Se siente raro. –

Cuestiones relacionadas