Tengo una vista de desplazamiento que contiene una vista personalizada. La vista personalizada es más grande que el área de la pantalla y dibuja correctamente.Optimizaciones de vista de desplazamiento
La vista de desplazamiento sin embargo tiende a llamar a OnDraw() sin parar cuando se desplaza, y parece que no puedo hacerlo sin problemas.
Utilicé ScrollView.getDrawingRect() para calcular la parte visible de la pantalla y solo dibujar a eso, pero todavía devuelve la vista completa (por lo que está optimizada para no dibujar áreas fuera de pantalla), y no el delta entre la última posición y la actual. Idealmente, me gustaría dibujar solo el delta, y no toda la ventana visible.
Si alguien me puede indicar más información sobre cómo usar los cachés de dibujo, y si eso ayuda a optimizar el desplazamiento, me encantaría implementarlo, o cualquier otra posible solución, sería muy apreciado.
Hay mejores soluciones, podría implementar mi propia memoria caché dibujando mi vista en un mapa de bits, y luego dibujar ese mapa de bits en Draw en lugar de volver a calcular mi vista. El almacenamiento en caché de la vista de Android debería poder hacer algo similar, y la documentación lo insinúa, pero nunca he visto algo que explique claramente el almacenamiento en caché de la vista. – HaMMeReD
Ha echado un vistazo a http://groups.google.com/group/android-developers/browse_thread/thread/224457b8cb4e039c?pli=1. Pero estoy de acuerdo, el tema del caché de dibujo no está bien discutido. –
Por ahora acabo de implementar la ruta del mapa de bits. En mi onDraw veo si hay un mapa de bits de caché, creo que sea del mismo tamaño que la vista si existe, luego de llamar a mi viejo onDraw con un lienzo que apunta al mapa de bits. Que en onDraw regular simplemente dibuja el mapa de bits. Es una compensación de memoria/rendimiento, pero estoy de acuerdo con eso aquí, ya que estas vistas no deberían ser demasiado grandes. Si no puede asignar el caché, puedo recurrir al dibujo directamente a la vista. – HaMMeReD