View.isHardwareAccelerated () ist immer falsch

Ich habe eine Ansicht, die auf vielen Geräten hardwarebeschleunigt ist. In dieser Ansicht muss ich überprüfen können, ob die Hardwarebeschleunigung verwendet wird.Laut Android SDK-DokumentationDies geschieht mitView.isHardwareAccelerated(). Das Interessante ist, dass beim Testen auf Geräten, die Hardwarebeschleunigung unterstützen, diese Methode immer false zurückgibt, obwohl die Ansichten selbst hardwarebeschleunigt werden. (Ich habe dies endgültig überprüft.) Es wird verwirrender:

Wenn ich anrufeView.getLayerType() Ich sehe, dass es immer so eingestellt istView.LAYER_TYPE_NONE. Wenn ich anrufeView.setLayerType(View.LAYER_TYPE_SOFTWARE) Ich kann die Hardwarebeschleunigung effektiv deaktivieren. Ich kann es wieder aktivieren, indem ich entweder anrufeView.setLayerType(View.LAYER_TYPE_HARDWARE) ODERView.setLayerType(View.LAYER_TYPE_NONE). Warum würdeView.LAYER_TYPE_NONE Hardwarebeschleunigung aktivieren???

Wenn ich weitermache, kann ich für Geräte, die die Hardware-Beschleunigung unterstützen, den Status nur überprüfen, indem ich überprüfe, ob sie verfügbar sindView.LAYER_TYPE_SOFTWARE ist eingestellt, aber ich habe den Verdacht, dass diese Methode nicht auf Geräten funktioniert, die keine Hardwarebeschleunigung unterstützen. Ich würde gerne wissen, ob ich etwas falsch macheView.isHardwareAccelerated() oder wenn es einfach kaputt ist.

EDIT: Ich denke, ich bin ein bisschen näher am Verständnis des Problems. Diese Frage war auch hilfreich:

Hardware-Beschleunigung zur Laufzeit erkennen: Android

Meine Arbeitstheorie ist, dass die Ansicht noch nicht weiß, ob sie hardwarebeschleunigt ist oder nicht, wenn der Konstruktor aufgerufen wird. In diesem Fall frage ich mich, was ich in meiner Klasse, die View erweitert, überschreiben kann, damit ich die Hardwarebeschleunigung erfolgreich überprüfen kann. Ich vermute, dassView.onSizeChanged(...) würde funktionieren, aber ich möchte vermeiden, etwas zu verwenden, das möglicherweise mehrmals aufgerufen werden kann.

EDIT # 2: Sieht so aus, als ob es das war. Ich habe meinen Scheck eingelegtView.onSizeChanged() und es meldet sich jetzt richtig. Ich frage mich immer noch, ob es in meiner Ansicht einen besseren Ort gibt, an dem ich diesen Scheck verschieben kann.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage