No recorte las páginas de ViewPager

No puedo obtener mi ViewPager sin recortar el contenido de sus páginas.

Actualmente estoy usando ViewPager con un FragmentStatePagerAdapter en mi aplicación. Tengo 3 páginas, cada página está mostrando un fragmento diferente. Todo funciona bien, pero ahora quiero poder dibujar fuera de los límites de mis páginas, como en esta imagen:

Lo que quiero

clipChildren y clipToPadding a false en mi todos los padres de vista a las vistas que tiene que dibujar fuera de sus límites, pero aquí es lo que obtienes: mis puntos de vista se cortan de acuerdo a las páginas de límites.

Lo que consigo

Algunas informaciones adicionales: Para solucionar ese problema, utilicé hierarchyviewer para comprobar mi jerarquía de vista y ver si algunas vistas "bajo el capó" podrían tener un comportamiento de recorte. Y bingo: cada una de las vistas de mis fragmentos se agrega bajo un NoSaveStateFrameLayout . Sospecho que este tipo para cortar a sus hijos …

¿Es correcto mi última asunción en su opinión? ¿Cómo haría usted para conseguir las páginas unclipped?

Hay algunas vistas diferentes que requieren recorte deshabilitado. En primer lugar, el FrameLayout que está en la raíz del ViewPager necesita tener el recorte deshabilitado. Puede hacerlo siempre que inicialice su buscapersonas de vista. También debe establecer el límite de página fuera de pantalla en 2 para permitir que se cargue un fragmento adicional durante un desplazamiento. Sin esto, verás un pop que va desde 1-> 2 como 3 cargas y agrega su contenido de desbordamiento a 2 una vez que haya terminado de cargar (esto carga tanto 2 como 3 antes de tiempo).

 mViewPager.setClipChildren(false); mViewPager.setClipToPadding(false); mViewPager.setOffscreenPageLimit(2); 

En segundo lugar, el XML que infla en su FragmentStatePagerAdapter debe incluir las etiquetas apropiadas o puede hacerse mediante programación. Por último, es necesario forzar el NoSaveStateFrameLayout para no clip también. Esto se puede hacer después de que la vista se haya creado en onViewCreated. He aquí un fragmento de ejemplo:

 public static class PlaceholderFragment extends Fragment { public static PlaceholderFragment newInstance() { PlaceholderFragment fragment = new PlaceholderFragment(); return fragment; } public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { LinearLayout rootView = (LinearLayout) inflater.inflate(R.layout.fragment_main, container, false); //This can be done in XML rootView.setClipChildren(false); rootView.setClipToPadding(false); return rootView; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); //This is the NoSaveStateFrameLayout - force it to not clip FrameLayout frameLayout = (FrameLayout) getView(); frameLayout.setClipChildren(false); frameLayout.setClipToPadding(false); } } 

He probado esta solución y estoy seguro de que funciona.

Ejemplo de actividad completa: https://gist.github.com/grantamos/d664f01a30f9ad97ba53

¿Ha intentado utilizar un valor negativo para el margen entre páginas (mediante ViewPager.setPageMargin(int) )? También tendrá que establecer límite de página fuera de pantalla como mínimo 2 (usando ViewPager.setOffscreenPageLimit(int) ).

  • Igualar padre para viewpager dentro de scrollview no funciona
  • No se puede cambiar ID de contenedor de fragmento
  • Página curl con vista pager
  • Adaptador sin fin para ViewPager
  • ¿Cómo ocultar y mostrar correctamente la barra de acciones con la nueva API de la biblioteca de diseño?
  • Llenar cada fragmento en ViewPager con otro objeto JSON sin cargar de nuevo
  • Error con ViewPager y RecyclerView
  • MapView (mapas de android api v2) dentro de la distribución de fragmentos no muestra
  • Reposición / margen de ViewPager de Android entre fragmentos de página
  • Cambiar la duración de la animación ViewPager al deslizar de forma programática
  • OnPageScrollStateChanged de Android ViewPager nunca se llama
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.