viewpager studio sectionspageradapter fragments example android android-viewpager

android - studio - Varias páginas al mismo tiempo en un ViewPager



viewpager android studio (8)

No creo que eso sea posible con las limitaciones de un Buscapersonas. Solo permite que un usuario vea las páginas 1 a la vez. Es posible que pueda resolver algo con el uso de fragmentos, y tenga 2 fragmentos de ViewPager uno al lado del otro y use botones para calcular la página que desea implementar, pero el código puede volverse muy complejo.

Puede probar algo como un ViewFlipper, donde puede hacer muchas más personalizaciones (incluidas animaciones).

Espero que esto ayude.

¿Existe la posibilidad de mostrar dos páginas al mismo tiempo, cuando se utiliza un ViewPager ? No estoy buscando un efecto de borde, sino dos páginas completas al mismo tiempo.

Gracias por adelantado.



Puede resolver este problema utilizando getPageWidth en la clase PagerAdapter.

Asegúrese de que su JAR esté actualizado. Dado que anteriormente ViewPager no soportaba varias páginas al mismo tiempo.

Flotante público getPageWidth () {

return 0.4f; (Puede elegirlo. Para pantalla completa por página debe dar 1f)}


Se puede donar en el Diseño del Item del Viewpager. Supongamos que quieres 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; }

Versión editada para más de dos artículos

si desea más de dos elementos, primero agregue sus artículos a LinearLayout y luego use el siguiente algoritmo:

photoBox1.setImageResource(photosIds[position]); if(position < photosIds.length-i-1){ photoBox2.setImageResource(photosIds[position+1]); photoBox3.setImageResource(photosIds[position+2]); . . . photoBox(i).setImageResource(photosIds[position+i-1]); } else if(position < photosIds.length-i-2){ photoBox2.setImageResource(photosIds[position+1]); photoBox3.setImageResource(photosIds[position+2]); . . . photoBox(i-1).setImageResource(photosIds[position+i-2]); photoBox(i).setImageResource(photosIds[0]); } . . . else if(position < photosIds.length-1){ photoBox2.setImageResource(photosIds[position+1]); photoBox3.setImageResource(photosIds[0]); photoBox4.setImageResource(photosIds[1]); . . . photoBox(i-1).setImageResource(photosIds[i-2-2]); photoBox(i).setImageResource(photosIds[i-2-1]); } else { photoBox2.setImageResource(photosIds[0]); photoBox3.setImageResource(photosIds[1]); . . . photoBox(i-1).setImageResource(photosIds[i-1-2]); photoBox(i).setImageResource(photosIds[i-1-1]); }

i : número de tus artículos

[i-2-2] : el número 2 en el medio es el número de elementos en la última página del visor .


Ver esa entrada de blog .
La técnica de PagerContainer ha resuelto mi problema.

EDITAR:
Encontré la misma respuesta.
¿Cómo migrar de Gallery a HorizontalScrollView & ViewPager?


crea tu 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 tan pequeño como quieres que sean tus páginas. Con android: clipToPadding = "false", las páginas fuera del buscapersonas también son visibles. Pero ahora arrastrar afuera del visor no tiene ningún efecto. Esto se puede remediar seleccionando toques del contenedor de buscapersonas y pasándolos 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); } });


getPageWidth() anular el método getPageWidth() en el Adaptador del visor. Por ejemplo:

@Override public float getPageWidth(int position) { return 0.9f; }

Prueba ese código en tu Adaptador y luego lo entenderás.


Vea mi respuesta más actualizada aquí: ¿Puede ViewPager tener múltiples vistas en cada página?

Descubrí que tal vez una solución aún más simple mediante la especificación de un margen negativo para ViewPager. Creé el proyecto MultiViewPager en GitHub, que es posible que desee ver:

https://github.com/Pixplicity/MultiViewPager

Aunque esta pregunta específicamente solicita una solución sin efecto de borde, algunas respuestas aquí proponen la solución por parte 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 ViewPager:

ViewPager.setPageMargin( getResources().getDimensionPixelOffset(R.dimen.viewpager_margin));

Luego especifiqué 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 ).

Implementamos esto en la aplicación de periódico holandesa De Telegraaf Krant :