studio needs force error emulator currently java android android-canvas hardware-acceleration

java - needs - error en android emulator emulator error x86 emulation currently requires hardware acceleration



Aceleración del hardware TextureView de Android con lockCanvas() (2)

Consulte el artículo de developer.android.com/guide/topics/graphics/hardware-accel.html .

Básicamente, si desea que su TextureView sea ​​acelerado por hardware, debe asegurarse de que la aceleración de hardware esté habilitada en algún nivel en el contexto de su TextureView, es decir, uno de los siguientes:

  • A nivel de aplicación: <application android:hardwareAccelerated="true" ...>
  • A nivel de actividad: <activity android:hardwareAccelerated="true" />
  • En el 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 es realmente obligatoria para usar un TextureView :

TextureView solo se puede utilizar en una ventana acelerada por hardware. Cuando se representa en el software, TextureView no dibujará nada.

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

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

Me da la salida: verdadero, falso ( this es un TextureView )

¿Alguien sabe por qué el canvas no es acelerado por hardware, y cómo hacerlo así?

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


TextureView funciona solo cuando la aplicación es acelerada por hardware, pero el Canvas que retorna de lockCanvas() actualmente nunca es acelerado por hardware. Esto significa que dibujará dentro del TextureView de TextureView en el software, pero TextureView se dibujará usando la GPU. Actualmente, la única forma de obtener un Canvas acelerado por hardware es usar el onDraw(Canvas) de una Vista.