View.isHardwareAccelerated()始终为false

Nic*_*ick 12 android hardware-acceleration

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

如果我打电话给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启用硬件加速???

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

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

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

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

编辑#2:看起来就是这样.我把支票搬进去View.onSizeChanged(),现在报道正确.我仍然想知道在我的视图中是否有更好的位置我可以移动此检查.

Bos*_*tor 6

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