【发布时间】:2012-08-20 15:05:48
【问题描述】:
我有一个可以在许多设备上进行硬件加速的 View。在该视图中,我需要能够检查是否使用了硬件加速。 According to Android SDK documentation,这是使用 View.isHardwareAccelerated() 完成的。有趣的是,在支持硬件加速的设备上进行测试时,此方法总是返回 false,即使 View 本身实际上正在硬件加速。 (我已经最终验证了这一点)它变得更加混乱:
如果我打电话给View.getLayerType(),我发现它总是设置为View.LAYER_TYPE_NONE。如果我打电话给View.setLayerType(View.LAYER_TYPE_SOFTWARE),我可以有效地禁用硬件加速。我可以通过调用View.setLayerType(View.LAYER_TYPE_HARDWARE) 或View.setLayerType(View.LAYER_TYPE_NONE) 重新启用它。为什么View.LAYER_TYPE_NONE会启用硬件加速???
继续前进,对于支持硬件加速的设备,我似乎可以通过检查是否设置了View.LAYER_TYPE_SOFTWARE 来检查状态,但是我怀疑这种方法不适用于不支持硬件加速的设备.我想知道我是误用了View.isHardwareAccelerated(),还是它只是坏了。
编辑: 我想我更接近于理解这个问题。这个问题也很有帮助:
Detect Hardware Acceleration at Runtime: Android
我的工作理论是视图在调用它的构造函数时还不知道它是否是硬件加速的,这就是我正在检查的地方。如果是这种情况,我想知道我可以在扩展 View 的类中覆盖什么,这将使我能够成功检查硬件加速。我怀疑View.onSizeChanged(...) 会起作用,但我想避免使用可能会被多次调用的东西。
编辑#2:
看起来就是这样。我将支票移至View.onSizeChanged(),它现在报告正确。我仍然想知道我的视图中是否有更好的地方可以移动此检查。
【问题讨论】:
-
我很好奇,你搞清楚LAYER_TYPE_HARDWARE、LAYER_TYPE_SOFTWARE和LAYER_TYPE_NONE的区别了吗?
标签: android hardware-acceleration