¿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.Varias páginas al mismo tiempo en un ViewPager
Gracias de antemano.
¿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.Varias páginas al mismo tiempo en un ViewPager
Gracias de antemano.
No creo que 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 las animaciones).
Espero que esto ayude.
Por favor, eche un vistazo al Método getPageWidth
en el PagerAdapter
correspondiente. Anularlo y devolver, p. 0.8f
para que todas las páginas secundarias abarquen solo el 80% del ancho de ViewPager.
Más información: http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#getPageWidth(int)
el problema con esa técnica, es que aparece un margen de margen extra, añadiendo un extraño espacio en blanco debajo del Viewpager – elgui
¡Creo que esta es la mejor respuesta! –
Esto agrega un poco de efecto de parpadeo en el buscapersonas, todavía puedo deslizar y puedo ver que las vistas producen un parpadeo extraño. – pyus13
Ver that blog entry.
La técnica PagerContainer ha resuelto mi problema.
EDIT:
he encontrado misma respuesta.
How to migrate from Gallery to HorizontalScrollView & ViewPager?
¡Bienvenido a StackOverflow! ¿Desea agregar un fragmento de esa publicación de blog a su respuesta, para que siga siendo útil si el enlace muere? –
@ S.L.Barth Gracias por su consejo. Modifiqué mi respuesta – kaw
Puede resolver este problema utilizando getPageWidth en la clase PagerAdapter.
estar seguro acerca de si su JAR es hasta a la fecha .Desde previamente ViewPager no estaba apoyando a varias páginas al mismo tiempo.
flotación pública getPageWidth() {
retorno 0,4F; (se puede elegir que .Por pantalla completa por página usted debe dar 1f) }
ver mis más arriba-hasta la fecha respuesta aquí: Can ViewPager have multiple views in per page?
Descubrí que una solución quizás incluso más simple mediante la especificación de un margen negativo para ViewPager. He creado el proyecto MultiViewPager en GitHub, que es posible que desee echar un vistazo a:
pesar de que esta pregunta se refiere específicamente a una solución sin efecto de borde, algunas respuestas aquí proponen la solución por parte de CommonsWare, como la sugerencia de kaw.
Existen 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));
entonces he especificado esta dimensión en mi dimens.xml
:
<dimen name="viewpager_margin">-64dp</dimen>
Para compensar las páginas superpuestas, ver el contenido de cada página tiene el margen opuesto:
android:layout_marginLeft="@dimen/viewpager_margin_fix"
android:layout_marginRight="@dimen/viewpager_margin_fix"
de nuevo 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 viewpager_margin
dimensión absoluta.)
implementamos este in the Dutch newspaper app De Telegraaf Krant:
Me encantó su solución. Simple y elegante ...! Gracias hombre. Intentaba lograr esto usando 'PageTransformer'. –
funcionó para mí.También necesita agregar setOffScreenPageLimit (2) para mejorar el almacenamiento en caché en 2 para evitar retrasos en la segunda vista siguiente. – Giorgio
En nota anterior: Eso es ViewPager.setOffscreenPageLimit (2) en caso de que alguien sea expulsado. – fooser
Hay que reemplazar el método getPageWidth()
en el Adaptador de viewpager. Por ejemplo:
@Override
public float getPageWidth(int position) {
return 0.9f;
}
Pruebe ese código en su adaptador y entonces lo comprenderá.
Esto se ve muy similar a la respuesta @ Markus-Wörz? – bummi
crear 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>
la ViewPager es casi tan pequeño como usted quiere que sus páginas sean. Con android: clipToPadding = "false", las páginas fuera del buscapersonas también son visibles. Pero ahora arrastrando fuera del ViewPager no tiene ningún efecto Esto puede remediarse por recoger toques del localizador-contenedor 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 don en el diseño artículo del ViewPager. Supongamos que quieres dos páginas a la vez.
Ésta es la disposición 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 estoy muy seguro de lo que estás asking..can explicar un poco mas? – Cody
Quiero que ViewPager muestre dos de las páginas disponibles una al lado de la otra, igual que un libro. –
¿podría usar dos fragmentos para lograr un efecto de lado a lado? es solo una idea ... no me culpes ..... – NIPHIN