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:
- En ViewPager, al deslizar a la 3ª pestaña, el fragmento secundario en tab1 desaparece
- Android ViewPager llama manualmente a PageTransformer transformPage
- Cómo deshabilitar detrás de ver haga clic en evento Framelayout
- Segundo conjunto de pestañas en un fragmento de Android
- Viewpager está siendo expulsado de la pantalla
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.
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?
- ViewPager & ViewPagerIndicator no muestra nada
- Filtrado ListView que forma parte de un fragmento de ViewPager
- Error incluyendo Android-DirectionalViewPager .jar en Eclipse
- ViewPager omitir las vistas de devolución dejando en blanco
- Problemas con FragmentPagerAdapter
- ¿Cómo recargar / refrescar el fragmento que ya se ha mostrado una vez?
- Cambiar la dirección de desplazamiento de viewPager
- Viewpager + webview, cómo detener la carga de la webview
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)
).
- Error de autenticación al utilizar HttpPost con DefaultHttpClient en Android
- Nombres de clases de Android o Java con $ symbol