2012-08-25 14 views
10

Ho una vista che ha un'accelerazione hardware su molti dispositivi. All'interno di quella vista devo essere in grado di verificare se viene utilizzata l'accelerazione hardware. According to Android SDK documentation, questo viene fatto usando View.isHardwareAccelerated(). La cosa interessante è che quando si eseguono test su dispositivi che supportano l'accelerazione hardware, questo metodo restituisce sempre false, anche se le visualizzazioni stesse vengono effettivamente accelerate dall'hardware. (L'ho verificato in modo conclusivo) Diventa più confuso:View.isHardwareAccelerated() è sempre falso

Se faccio una chiamata a View.getLayerType() vedo che è sempre impostato su View.LAYER_TYPE_NONE. Se faccio una chiamata a posso effettivamente disabilitare l'accelerazione hardware. Posso riattivarlo chiamando lo View.setLayerType(View.LAYER_TYPE_HARDWARE) O View.setLayerType(View.LAYER_TYPE_NONE). Perché View.LAYER_TYPE_NONE abilita l'accelerazione hardware ???

Passando, per i dispositivi che supportano l'accelerazione hw sembra che posso solo controllare lo stato controllando se View.LAYER_TYPE_SOFTWARE è impostato, ma ho i miei sospetti che questo metodo non funzionerà su dispositivi che non supportano l'accelerazione hw. Mi piacerebbe sapere se mi sto abusando di View.isHardwareAccelerated() o se è semplicemente rotto.

MODIFICA: Penso di essere un po 'più vicino alla comprensione del problema. Questa domanda è stata anche utile:

Detect Hardware Acceleration at Runtime: Android

La mia teoria di lavoro è che la vista doesnt sa ancora se si tratta di hardware accelerata o non quando si tratta di costruttore viene chiamato, che è dove io sto facendo il mio assegno. Se questo è il caso, mi chiedo cosa posso ignorare nella mia classe che estende View che mi permetterà di verificare con successo l'accelerazione hardware. Sospetto che lo View.onSizeChanged(...) funzionerebbe, ma vorrei evitare di utilizzare qualcosa che potenzialmente può essere chiamato numerose volte.

EDIT # 2: Sembra che sia stato. Ho spostato il mio assegno in View.onSizeChanged() e ora viene segnalato correttamente. Mi sto ancora chiedendo se c'è un posto migliore nel mio View che posso spostare questo controllo però.

+0

Sono curioso, hai capito la differenza tra LAYER_TYPE_HARDWARE, LAYER_TYPE_SOFTWARE e LAYER_TYPE_NONE? –

risposta

2

Ho riflettuto su questo per un po 'di tempo. È bello vederti capire qual è il problema. La documentazione descrive correttamente questo, ma non è molto chiaro. "Restituisce: True se la vista è attaccato a una finestra e la finestra è l'hardware accelerata"

Problemi correlati