Problemas de rendimiento de Android ViewPager al utilizar el fondo
Tengo una Activity
hecha por XML, he fijado su fondo a una imagen de fondo que tengo en mi carpeta drawable.
En la misma actividad he creado un ViewPager
para permitir pasar y retroceder entre las vistas. Todas las vistas dentro de ViewPager
contienen una imagen.
- Cómo evitar que viewpager inicialice la vista siguiente de forma predeterminada en android?
- Igualar padre para viewpager dentro de scrollview no funciona
- Causando un error de java.IllegalStateException, ninguna actividad, solamente cuando navega al fragmento por la SEGUNDA vez
- Desplazamiento Dirección en ViewPager
- Viewpager no se muestra dentro de la fila RecyclerView
Siempre que deslizo hacia la izquierda o hacia la derecha, la transición es muy lenta.
Traté de quitar la imagen de fondo estableciéndola en blanco (#fff) y todo el retraso había desaparecido. Funcionó perfecto! El problema es que necesito ese fondo para la aplicación.
¿Hay alguna forma de optimizar una imagen de fondo o algo así swiping va a ir sin problemas otra vez? Actualmente es demasiado frustrante usar debido al retraso.
También traté de recortar la imagen a un tamaño pequeño y luego sólo lo estiró sobre la pantalla, pero no vi ninguna mejora en el rendimiento. También no es la falta de imágenes que se encuentran en el ViewPager
, cuando lo probé con TextViews en su lugar había el mismo retraso.
- Android DrawerLayout no funciona con ViewPager?
- Navegación anterior separada para un buscador de vistas con pestañas en Android
- La actividad que utiliza ViewPager, PagerAdapter y AsyncTask provoca una vista en blanco
- ViewPager con una página que contiene varios fragmentos "java.lang.IllegalArgumentException: No se encontró ninguna vista para id"
- ViewPager llamada setUserVisibleHint después de que se carga el primer fragmento
- Android ViewPager y vistas ilimitadas
- Cómo personalizar PagerTabStrip con stripDrawable y el espaciado
- Cómo mostrar programaticamente la vista siguiente en ViewPager?
Lo averigué yo mismo después de algunas búsquedas, voy a dejar la respuesta aquí para cualquier otra persona que se encuentra con este problema.
Al parecer, android tiene un montón de problemas para representar un fondo cuando la imagen se estira. Al menos en la Galaxy Tab 10.1 con Android 3.2 lo hace.
La imagen de fondo que estaba usando era una imagen de un piso de madera, porque es un patrón de los mismos tablones que se repite que yo maneje cortar la imagen abajo de 1440 x 1050 a cerca de 350×500. Al utilizar esta imagen como fondo mientras se extendía por toda la pantalla había una gran caída de rendimiento. Sin embargo, al mostrar como una sola imagen en la esquina superior izquierda, funcionó bien.
Utilizando el método descrito aquí logré repetir la imagen en toda la pantalla en lugar de estirarla. Sorprendentemente, no noté absolutamente ningún estrés adicional y las transiciones fueron muy suaves.
Así que aquí está, espero que esto ayude a otros con los mismos problemas de rendimiento!
Otra solución en los últimos años: Tienes que poner tu drawables en las carpetas apropiadas. Tuve mi background.png en la carpeta de dibujo y se quedó rezagado porque lucha con el streching. No podría utilizar repetible porque no tengo ese patrón en mi teléfono.
Pero cuando puse mi fondo dibujable en drawable-xhdpi, trabajé sin ningún retraso en absoluto. Así que para futuras referencias también es posible que esto podría resolver su problema. Ref esta pregunta que se resuelve: ViewPager muy lento en Samsung S4
Este truco me ayuda mucho al pasar con pager. Se basa en la aceleración de hardware.
viewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageScrollStateChanged(int scrollState) { if (scrollState != ViewPager.SCROLL_STATE_IDLE) { final int childCount = viewPager.getChildCount(); for (int i = 0; i < childCount; i++) viewPager.getChildAt(i).setLayerType(View.LAYER_TYPE_NONE, null); } } .... });
Espero que ayude.
- Cómo mostrar el efecto de degradado de arriba a abajo en android
- Phonegap agregar elementos a la bandeja de notificación