trazos - Consejos sobre el dibujo de alto rendimiento en Android.
restablecer la limitacion de frecuencia de shortcut manager android (1)
Fondo
Estoy escribiendo una biblioteca de gráficos para una aplicación de Android (sí, sí, sé que hay muchas por ahí pero ninguna que ofrezca la personalización que necesitamos).
Quiero que los gráficos se puedan ampliar y hacer paneo.
Problema
Quiero que la experiencia sea fluida, deje una pequeña huella de CPU.
Soluciones
- Usar
View.onDraw(Canvas)
- Usar
Bitmap
alta resolución - Usa
OpenGL
View.onDraw ():
Beneficios
- Algunos son fáciles de implementar.
Inconvenientes
- ¿Mal desempeño? (A menos que use OpenGL, ¿verdad?)
Mapa de bits:
Beneficios
- Realmente fácil de implementar
- Gran actuación
Inconvenientes
- Hay que usar una escala que es fea.
OpenGL:
Beneficios
- Probablemente buen rendimiento dependiendo de mi implementación
Inconvenientes
- Más trabajo para implementar.
Ultimas palabras
OpenGL probablemente sería la solución profesional y definitivamente ofrecería más flexibilidad, pero requeriría más trabajo (cuánto no está claro).
Una cosa que es definitivamente más fácil en OpenGL es hacer paneo / zoom ya que solo puedo manipular la matriz para hacerlo bien, el resto debería ser más difícil, aunque creo.
No tengo miedo de ensuciarme las manos, pero quiero saber que voy en la dirección correcta antes de empezar a cavar.
¿Me he perdido alguna solución? ¿Son todas mis soluciones cuerdas?
Notas adicionales:
Puedo agregar que cuando un gráfico cambie quiero animar los cambios, esta será quizás la tarea más exigente de todas.
El problema con el uso de Vistas es que se hereda de la sobrecarga del propio kit de herramientas de IU. Si bien el conjunto de herramientas está bastante bien optimizado, lo que hace no es necesariamente lo que usted quiere. El mayor inconveniente cuando desea controlar su dibujo es el bucle de invalidar / dibujar.
Puede solucionar este "problema" utilizando un SurfaceView. Un SurfaceView le permite renderizar en una ventana usando su propio hilo de renderización, evitando así la sobrecarga del kit de herramientas de UI. Y todavía puedes usar la API de renderizado de Canvas 2D.
Sin embargo, Canvas está utilizando un canal de renderizado de software. Su rendimiento dependerá principalmente de la velocidad de la CPU y del ancho de banda disponible. En la práctica, rara vez es tan rápido como OpenGL. Android 3.0 ofrece una nueva canalización de hardware para Canvas, pero solo cuando se renderiza a través de Views. No puede, en este momento, usar la tubería de hardware para renderizar directamente en un SurfaceView.
Recomendaría que pruebes SurfaceView primero. Si escribe su código correctamente (no dibuje más de lo que necesita, vuelva a dibujar solo lo que ha cambiado, etc.) debería poder lograr el rendimiento que busca. Si eso no funciona, ve con OpenGL.