12

我有一个在许多设备上进行硬件加速的视图。在该视图中,我需要能够检查是否使用了硬件加速。 根据 Android SDK 文档,这是使用View.isHardwareAccelerated(). 有趣的是,在支持硬件加速的设备上进行测试时,此方法总是返回 false,即使 View 本身实际上正在硬件加速。(我已经最终验证了这一点)它变得更加混乱:

如果我打电话给View.getLayerType()我,我发现它总是设置为View.LAYER_TYPE_NONE. 如果我打电话,View.setLayerType(View.LAYER_TYPE_SOFTWARE)我可以有效地禁用硬件加速。View.setLayerType(View.LAYER_TYPE_HARDWARE)我可以通过调用OR重新启用它View.setLayerType(View.LAYER_TYPE_NONE)。为什么要View.LAYER_TYPE_NONE启用硬件加速???

继续前进,对于支持硬件加速的设备,我似乎可以通过检查是否View.LAYER_TYPE_SOFTWARE设置来检查状态,但是我怀疑这种方法不适用于不支持硬件加速的设备。我想知道我是在滥用View.isHardwareAccelerated()还是只是坏了。

编辑:我想我更接近于理解这个问题。这个问题也很有帮助:

在运行时检测硬件加速:Android

我的工作理论是视图在调用它的构造函数时还不知道它是否是硬件加速的,这就是我正在检查的地方。如果是这种情况,我想知道我可以在扩展 View 的类中覆盖什么,这将使我能够成功检查硬件加速。我怀疑这View.onSizeChanged(...)会起作用,但我想避免使用可能被多次调用的东西。

编辑#2:看起来就是这样。我把我的支票搬进去了View.onSizeChanged(),现在它报告正确了。我仍然想知道我的视图中是否有更好的地方可以移动这张支票。

4

2 回答 2

6

我自己一直在思考这个问题。很高兴看到您弄清楚问题所在。该文档确实正确地描述了这一点,但并不是很清楚。“返回:如果视图附加到窗口并且窗口是硬件加速的,则为真”

于 2013-12-02T03:00:38.263 回答
2

正如 Diane Hackborn 在这篇文章中提到的那样:https ://groups.google.com/forum/#!topic/android-developers/vAH0HAZg0uU

您应该在视图附加到窗口后检查 isHardwareAccelerated() - 例如在 onAttachedToWindow() 中!

于 2014-03-17T12:39:26.887 回答