我在许多设备上都有一个硬件加速的视图。在该视图中,我需要能够检查是否使用了硬件加速。 According to Android SDK documentation,这是使用View.isHardwareAccelerated()
完成的。有趣的是,在支持硬件加速的设备上进行测试时,即使Views本身实际上是硬件加速,此方法也总是返回false。 (我已经最终确认了这一点)它变得更加混乱:
如果我拨打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
启用硬件加速???
继续,对于支持hw加速的设备,似乎我可以通过检查View.LAYER_TYPE_SOFTWARE
是否设置来检查状态,但是我怀疑这种方法不适用于不支持的设备加速度。我想知道我是否误用View.isHardwareAccelerated()
或者它是否被打破了。
编辑: 我想我更接近理解这个问题了。这个问题也很有帮助:
Detect Hardware Acceleration at Runtime: Android
我的工作原理是View在调用构造函数时还不知道硬件是否加速,这就是我正在检查的地方。如果是这种情况,我想知道我可以在我的类中覆盖哪些扩展View,这将允许我成功检查硬件加速。我怀疑View.onSizeChanged(...)
会起作用,但我想避免使用可能被多次调用的东西。
View.onSizeChanged()
,现在报告正确。我仍然想知道在我的视图中是否有更好的位置我可以移动此检查。
答案 0 :(得分:4)
我自己一直在思考这个问题。很高兴看到你弄清楚问题是什么。文档确实正确地描述了这一点,但它并不十分清楚。 “返回:如果视图附加到窗口并且窗口是硬件加速的话,则返回”
答案 1 :(得分:1)
正如Diane Hackborn在这篇文章中提到的那样:https://groups.google.com/forum/#!topic/android-developers/vAH0HAZg0uU
在视图附加到窗口后,您应该检查isHardwareAccelerated() - 例如在onAttachedToWindow()!