Múltiples páginas al mismo tiempo en un ViewPager
¿Existe la posibilidad de mostrar dos páginas al mismo tiempo, cuando se utiliza ViewPager
? No estoy buscando un efecto de borde, sino más bien para dos páginas completas al mismo tiempo.
Gracias por adelantado.
- ViewPagers en un ListView mostrando elementos de la lista en blanco
- Configuración de imágenes de url en ViewPager Android
- Android - combinar viewpager horizontal con viewpager vertical
- Reemplazar Fragmento actual en ViewPager en Android
- ¿Es posible acceder al Fragmento actual que está siendo visualizado por un ViewPager?
- Comunicación de Android entre la actividad y el fragmento
- Android Master / Detalle de flujo dentro de ViewPager
- ViewPager en DialogFragment - IllegalStateException: Fragmento no tiene una vista
- Tratamiento de fragmento y ver paginador: no se puede cambiar la etiqueta de fragmento AND Entrada recursiva para ejecutarPendingTransactions
- PagerTabStrip tabs alineación a la izquierda
- ¿Cómo obtener el fragmento actual que se muestra en una pestaña específica de un viewpager?
- ViewPager Parpadea al tocar en el área vacía
- La clase PagerAdapter se llama varias veces
Por favor, eche un vistazo al método getPageWidth
en el PagerAdapter
correspondiente. 0.8f
y devolver, por ejemplo, 0.8f
para que todas las páginas secundarias abarquen sólo el 80% del ancho de ViewPager.
Más información: http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#getPageWidth(int)
Vea mi respuesta más actualizada aquí: ¿Puede ViewPager tener varias vistas en cada página?
Descubrí que tal vez una solución aún más simple a través de la especificación de un margen negativo para el ViewPager. He creado el proyecto MultiViewPager en GitHub, que puede que desee echar un vistazo a:
Aunque esta pregunta pide específicamente una solución sin efecto de borde, algunas respuestas aquí proponen la solución alternativa de CommonsWare, como la sugerencia de kaw.
Hay varios problemas con el manejo táctil y la aceleración de hardware con esa solución en particular. Una solución más simple y más elegante, en mi opinión, es especificar un margen negativo para el ViewPager:
ViewPager.setPageMargin( getResources().getDimensionPixelOffset(R.dimen.viewpager_margin));
A continuación, especificó esta dimensión en mi dimens.xml
:
<dimen name="viewpager_margin">-64dp</dimen>
Para compensar las páginas superpuestas, la vista de contenido de cada página tiene el margen opuesto:
android:layout_marginLeft="@dimen/viewpager_margin_fix" android:layout_marginRight="@dimen/viewpager_margin_fix"
Nuevamente en dimens.xml
:
<dimen name="viewpager_margin_fix">32dp</dimen>
(Tenga en cuenta que la dimensión viewpager_margin_fix
es la mitad de la dimensión absoluta viewpager_margin
.)
Lo implementamos en la aplicación de prensa holandesa De Telegraaf Krant :
Tienes que anular el método getPageWidth()
en el adaptador del viewpager. Por ejemplo:
@Override public float getPageWidth(int position) { return 0.9f; }
Intente ese código en su adaptador y entonces usted entenderá.
Vea esa entrada de blog .
PagerContainer técnica se resuelve mi problema.
EDITAR:
Encontré la misma respuesta.
¿Cómo migrar de Galería a HorizontalScrollView & ViewPager?
Puede resolver este problema utilizando getPageWidth en la clase PagerAdapter.
Asegúrese de que su JAR esté actualizado. Como anteriormente ViewPager no era compatible con varias páginas al mismo tiempo.
Float público getPageWidth () {
Return 0.4f; (Puede elegirlo .Para pantalla completa por página debe dar 1f)}
Cree su archivo de diseño: my_layout.xml:
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <FrameLayout android:id="@+id/pager_container" android:layout_width="match_parent" android:layout_height="240dp" android:clipChildren="false"> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="200dp" android:clipToPadding="false" android:layout_height="200dp" android:layout_marginLeft="70dp" android:layout_marginRight="70dp" android:layout_gravity="center" /> </FrameLayout> </layout>
El viewpager es aproximadamente tan pequeño como usted quisiera que fueran sus páginas. Con android: clipToPadding = "false" las páginas fuera del buscapersonas también están visibles. Pero ahora arrastrar fuera del viewpager no tiene efecto Esto se puede remediar recolectando toques desde el contenedor de buscapersonas y pasarlos al buscapersonas:
MyLayoutBinding binding = DataBindingUtil.<MyLayoutBinding>inflate(layoutInflater, R.layout.my_layout, parent, false) binding.pager.setOffscreenPageLimit(3); binding.pager.setPageMargin(15); binding.pagerContainer.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return chatCollectionLayoutBinding.pager.onTouchEvent(event); } });
Puede ser puesto en la disposición del artículo del Viewpager. Suponga que, usted quiere dos páginas a la vez.
Este es el diseño del artículo (photo_slider_item.xml):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/photosSliderItem"> <ImageView android:id="@id/photoBox1" style="@style/photoBox"/> <ImageView android:id="@id/photoBox2" style="@style/photoBox"/> </LinearLayout>
Y en su PagerAdapter:
@Override public View instantiateItem(ViewGroup container, int position){ View sliderItem = LayoutInflater.from(container.getContext()).inflate(photo_slider_item, container, false); ImageView photoBox1 = (ImageView) sliderItem.findViewById(R.id.photoBox1); ImageView photoBox2 = (ImageView) sliderItem.findViewById(R.id.photoBox2); photoBox1.setImageResource(photosIds[position]); if(position < photosIds.length-1){ photoBox2.setImageResource(photosIds[position+1]); } else {photoBox2.setImageResource(photosIds[0]);} container.addView(sliderItem); return sliderItem; }
No creo que eso sea posible con las limitaciones de un View Pager. Sólo permite al usuario ver las páginas 1 a la vez. Podrías resolver algo con el uso de fragmentos y tener 2 fragmentos de ViewPager uno al lado del otro y usar botones para calcular la página que quieres implementar, pero el código puede llegar a ser muy complejo.
Puedes probar algo como un ViewFlipper – donde puedes hacer muchas más personalizaciones (incluyendo animaciones).
Espero que esto ayude.