2012-04-01 10 views
16

Estoy tratando de usar la aceleración de hardware para Android con mi lienzo. Solía ​​tener un SurfaceView en el que hice lockCanvas() para obtener un lienzo que luego utilicé, pero cambié a TextureView porque no pude obtener SurfaceView para usar la aceleración de hardware. Actualmente estoy tratando de obtener este lienzo para usar la aceleración de hardware.Android TextureView aceleración de hardware con lockCanvas()

Canvas canvas = this.lockCanvas(); 
System.out.println(this.isHardwareAccelerated() + ", " + canvas.isHardwareAccelerated()); 

me da la salida: verdadero, falso (this es una TextureView)

¿Alguien sabe por qué el canvas no se acelera el hardware, y cómo lo hacen tan?

Editar: Por lo que he encontrado, parece que tengo que usar OpenGL. Sin embargo, aún me gustaría saber si hay planes anunciados para hacer posible la aceleración de hardware para ese lienzo.

+0

Debe habilitar la aceleración de hardware para su actividad: http://developer.android.com/guide/topics/manifest/activity-element.html#hwaccel. –

+0

Puede consultarlo en http://developer.android.com/guide/topics/graphics/hardware-accel.html. No sé si esta es la respuesta. Porque dice que el control Canvas.isHardwareAccelerated se puede usar en Canvas.onDraw. – e7fendy

Respuesta

5

Consulte el artículo Hardware Acceleration.

Básicamente, si usted quiere que su TextureView ser acelerada por hardware debe asegurarse de que la aceleración de hardware está habilitada en un cierto nivel en el contexto de su TextureView, es decir, uno de los siguientes:

  • a nivel de aplicación: <application android:hardwareAccelerated="true" ...>
  • Al nivel de actividad: <activity android:hardwareAccelerated="true" />
  • Al nivel de la ventana:

getWindow().setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

Tenga en cuenta que la aceleración de hardware en realidad es obligatorio el uso de un TextureView:

TextureView sólo se puede utilizar en una ventana de hardware acelerado. Cuando se procesa en software, TextureView no dibujará nada.

+0

Fantástica respuesta, gracias. – Sipty

9

TextureView sólo funciona cuando la aplicación es acelerada por hardware, pero el Canvas que regresa de lockCanvas() es actualmente Nunca acelerada por hardware. Esto significa que dibujará dentro del software TextureViewCanvas, pero el TextureView se dibujará usando la GPU. Actualmente, la única forma de obtener un Lienzo acelerado por hardware es usar el método onDraw(Canvas) de una Vista.

Cuestiones relacionadas