2012-08-25 58 views
10

我有許多設備上硬件加速的視圖。在這個視圖中,我需要能夠檢查是否使用硬件加速。 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(),現在報告正確。我仍然想知道,如果在我的視圖中有更好的地方,我可以移動這張支票。

+0

我很好奇,你有沒有想過LAYER_TYPE_HARDWARE,LAYER_TYPE_SOFTWARE和LAYER_TYPE_NONE之間的區別? –

回答

2

我一直在琢磨這一段時間我自己。很高興看到你找出問題所在。文檔沒有正確描述這一點,但它不是很清楚。 「返回:如果認爲連接到窗口和窗口硬件加速」

相關問題