Canvas en SurfaceView – Aceleración de hardware
Estoy desarrollando en ICS y tratando de entender por qué un Canvas.isHardwareAccelerated () siempre devolverá FALSE cuando se utiliza un lienzo dentro de un SurfaceView.
He intentado un ejemplo muy básico como este: http://android-coding.blogspot.com/2011/05/drawing-on-surfaceview.html O este: http://jmsliu.com/199/android- Canvas-example.html
- ¿Cómo hacer un SurfaceView siempre horizontal?
- Cómo tomar una foto (instantánea) mientras el video se ha grabado con la vista de la superficie
- La eficiencia sobre el dibujo de lienzo android
- Error al inflarse al extender una clase
- Android: onPreviewFrame nunca llamado sin SurfaceView
Incluso los modifiqué para que no tuvieran ninguna llamada de lienzo dentro del bucle de dibujo pensando que podría haber obtenido en algunas operaciones de aceleración HW no compatibles para ciertas llamadas de dibujo. Revisé esta lista en "Operaciones de dibujo no soportadas" developer.android.com/guide/topics/graphics/hardware-accel.html pero no estoy haciendo nada de eso.
Estoy usando el indicador de renderización de Force GPU dentro de las Opciones de Desarrollador junto con dentro de los manifiestos, también estoy especificando minSDK / targetSDK> = 14.
El View.isHardwareAccelerated devolverá TRUE, mientras que el Canvas.isHardwareAccelerated volverá siempre FALSE.
He visto que Canvas.java tiene hard-codeded return false para isHardwareAccelerated (), mientras que HardwareCanvas.java tiene return true. Supongo que por algunas razones no estoy recibiendo el camino de HW, ¿por qué?
¿Puede un lienzo dentro de un SurfaceView ser HW acelerado?
Gracias
- Corregir la relación de aspecto y la rotación de la aplicación de la cámara Android
- Imagen de leva en el soporte de superficie, dibujar: Excepción debido al tipo de superficie
- Reabrir la cámara después de cancelar el selector de intenciones
- ¿Es OpenGL en Android un asesino de la batería?
- Cómo escalar el video en un SurfaceView más grande que la ventana en Android?
- Cámara Android: la aplicación superó la superficie NULL
- Crear ImageView de forma programática sin diseño
- Invisible SurfaceView para previsualización de la cámara
Un lienzo devuelto por SurfaceView.lockCanvas()
no se puede acelerar por hardware en este momento.
Parece que hay un nuevo método hide api unlockHardwareCanvas
en android.view.Surface
Y aquí está el ejemplo: http://androidxref.com/5.1.0_r1/xref/frameworks/base/tests/HwAccelerationTest/src/com/android/test/hwui/HardwareCanvasSurfaceViewActivity.java
Puede utilizar relfecation en entornos de producción.
¿Ha declarado en su manifiesto android, que su aplicación quiere utilizar la aceleración de hw?
Esto sería algo así como <application android:hardwareAccelerated="true" ...>
Dependiendo de lo que desee hacer, también podría ser útil activar la aceleración sólo para una actividad o ventana, consulte http://developer.android.com/guide/topics/graphics/hardware-accel.html para obtener más detalles.
Rudi