我有許多設備上硬件加速的視圖。在這個視圖中,我需要能夠檢查是否使用硬件加速。 According to Android SDK documentation,這是使用View.isHardwareAccelerated()
完成的。有趣的是,當在支持硬件加速的設備上測試時,即使視圖本身實際上正在硬件加速,該方法也總是返回false。 (我最終證實了這一點)它變得更加令人困惑:View.isHardwareAccelerated()始終爲false
如果我打電話給View.getLayerType()
,我發現它始終設置爲View.LAYER_TYPE_NONE
。如果我打電話給,我可以有效地禁用硬件加速。我可以通過撥打View.setLayerType(View.LAYER_TYPE_HARDWARE)
或View.setLayerType(View.LAYER_TYPE_NONE)
重新啓用它。 View.LAYER_TYPE_NONE
爲什麼會啓用硬件加速?
接下來,對於支持hw加速的設備,我似乎可以通過檢查是否設置View.LAYER_TYPE_SOFTWARE
來檢查狀態,但是我懷疑此方法不適用於不支持hw加速的設備。我想知道我是否在誤用View.isHardwareAccelerated()
或者它是否被破壞。
編輯: 我覺得我有點接近理解這個問題。這個問題也是有幫助的:
Detect Hardware Acceleration at Runtime: Android
我的工作原理是,查看犯規還不知道它是否是硬件加速與否時,它的構造函數被調用,這是我做我的支票。如果是這種情況,我想知道我可以在我的課程中覆蓋哪些擴展View,這將使我能夠成功檢查硬件加速。我懷疑View.onSizeChanged(...)
會起作用,但我想避免使用可能被多次調用的內容。編輯#2: 看起來就像這樣。我將支票移至View.onSizeChanged()
,現在報告正確。我仍然想知道,如果在我的視圖中有更好的地方,我可以移動這張支票。
我很好奇,你有沒有想過LAYER_TYPE_HARDWARE,LAYER_TYPE_SOFTWARE和LAYER_TYPE_NONE之間的區別? –