2012-04-01 5 views
16

Sto cercando di utilizzare l'accelerazione hardware per Android con la mia tela. Avevo uno SurfaceView che ho fatto su lockCanvas() per ottenere una tela su cui successivamente disegnare, ma sono passato a TextureView perché non potevo ottenere SurfaceView per utilizzare l'accelerazione hardware. Attualmente sto cercando di ottenere questa tela per utilizzare l'accelerazione hardware.Accelerazione hardware Android TextureView con lockCanvas()

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

mi dà l'uscita: vero, falso (this è un TextureView)

Qualcuno sa il motivo per cui il canvas non è con accelerazione hardware, e come fare così?

Modifica: Per quanto ho trovato, sembra che devo usare OpenGL. Tuttavia, mi piacerebbe ancora sapere se ci sono piani annunciati per rendere possibile l'accelerazione hardware per tale tela.

+0

È necessario abilitare l'accelerazione hardware per la propria attività: http://developer.android.com/guide/topics/manifest/activity-element.html#hwaccel. –

+0

Puoi verificarlo su http://developer.android.com/guide/topics/graphics/hardware-accel.html. Non so se questa è la risposta. Perché dice che il controllo Canvas.isHardwareAccelerated può essere utilizzato in Canvas.onDraw. – e7fendy

risposta

5

Controllare l'articolo Hardware Acceleration.

In sostanza, se si desidera che il TextureView essere accelerazione hardware è necessario assicurarsi che l'accelerazione hardware è abilitato a un certo livello nel contesto del vostro TextureView, vale a dire uno dei seguenti modi:

  • A livello di applicazione: <application android:hardwareAccelerated="true" ...>
  • A livello di attività: <activity android:hardwareAccelerated="true" />
  • A livello finestra:

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

nota che l'accelerazione hardware è effettivamente obbligatorio usare un TextureView:

TextureView può essere utilizzato solo in una finestra hardware accelerata. Quando renderizzato nel software, TextureView non disegnerà nulla.

+0

Risposta fantastica, grazie. – Sipty

9

TextureView funziona solo quando l'applicazione è accelerazione hardware, ma il Canvas ritorna da lockCanvas() è attualmente mai accelerazione hardware. Ciò significa che disegnerai all'interno del TextureView il Canvas nel software, ma lo stesso TextureView verrà disegnato utilizzando la GPU. Attualmente, l'unico modo per ottenere una tela con accelerazione hardware è utilizzare il metodo onDraw(Canvas) di una vista.