2012-08-25 5 views
10

J'ai une vue accélérée matériellement sur de nombreux périphériques. Dans cette vue, je dois être en mesure de vérifier si l'accélération matérielle est utilisée. According to Android SDK documentation, ceci est fait en utilisant View.isHardwareAccelerated(). Ce qui est intéressant, c'est que lors du test sur des périphériques prenant en charge l'accélération matérielle, cette méthode renvoie toujours false, même si les vues elles-mêmes sont en cours d'accélération matérielle. (Je l'ai vérifié de manière concluante) Il devient plus confus:View.isHardwareAccelerated() est toujours false

Si je fais un appel à View.getLayerType() je vois qu'il est toujours mis à View.LAYER_TYPE_NONE. Si je fais appel à je peux effectivement désactiver l'accélération matérielle. Je peux le réactiver en appelant soit View.setLayerType(View.LAYER_TYPE_HARDWARE), soit View.setLayerType(View.LAYER_TYPE_NONE). Pourquoi View.LAYER_TYPE_NONE activerait l'accélération matérielle ??? De plus, pour les appareils qui supportent l'accélération HD, il semble que je puisse juste vérifier l'état en vérifiant si oui ou non View.LAYER_TYPE_SOFTWARE est défini, mais j'ai des doutes que cette méthode ne fonctionnera pas sur les appareils qui ne supportent pas l'accélération. Je voudrais savoir si j'utilise abusivement View.isHardwareAccelerated() ou si c'est simplement cassé.

EDIT: Je pense que je suis un peu plus près de comprendre le problème. Cette question a également été utile:

Detect Hardware Acceleration at Runtime: Android

Ma théorie de travail est que la vue ne marche pas savoir encore que ce soit l'accélération matérielle ou non quand il est constructeur est appelé, qui est l'endroit où je fais mon chèque. Si c'est le cas, je me demande ce que je peux remplacer dans ma classe qui étend View, ce qui me permettra de vérifier avec succès l'accélération matérielle. Je soupçonne que View.onSizeChanged(...) fonctionnerait, mais je voudrais éviter d'utiliser quelque chose qui peut potentiellement être appelé de nombreuses fois.

EDIT # 2: On dirait que c'était ça. J'ai déplacé mon chèque dans View.onSizeChanged() et il rapporte maintenant correctement. Je me demande toujours s'il y a un meilleur endroit dans ma vue que je peux déplacer cette vérification si.

+0

Je suis curieux, avez-vous compris la différence entre LAYER_TYPE_HARDWARE, LAYER_TYPE_SOFTWARE et LAYER_TYPE_NONE? –

Répondre

2

Je réfléchis à cela depuis un moment. C'est bon de voir que vous avez compris quel était le problème. La documentation décrit correctement cela, mais ce n'est pas très clair. « Retourne: true si la vue est fixé à une fenêtre et la fenêtre est l'accélération matérielle »

Questions connexes