SurfaceView中的Canvas - 硬件加速

时间:2012-03-06 17:26:13

标签: android canvas surfaceview hardware-acceleration

我正在开发ICS并试图理解为什么 使用a时,Canvas.isHardwareAccelerated()将始终返回FALSE SurfaceView中的画布。

我尝试过这样一个非常基本的例子: http://android-coding.blogspot.com/2011/05/drawing-on-surfaceview.html 或者这个:http://jmsliu.com/199/android-canvas-example.html

我甚至将它们修改为在绘制循环中没有任何画布调用 以为我可能会遇到一些不受支持的硬件加速操作 对于某些绘图调用。 我在“不支持的绘图操作”下检查了此列表 developer.android.com/guide/topics/graphics/hardware-accel.html 但是我没有这样做。

我在Developer Options中使用Force GPU渲染标志 和...一起 在清单中,我也指定minSDK / targetSDK> = 14。

View.isHardwareAccelerated将返回TRUE,而 Canvas.isHardwareAccelerated将始终返回FALSE。

我已经看到Canvas.java的硬编码返回false为isHardwareAccelerated(),而HardwareCanvas.java返回true。我想由于某些原因我没有获得硬件路径,为什么?

SurfaceView中的Canvas可以加速HW加速吗?

由于

3 个答案:

答案 0 :(得分:14)

SurfaceView.lockCanvas()返回的画布目前无法进行硬件加速。

答案 1 :(得分:4)

似乎unlockHardwareCanvas

中有一个新的隐藏api方法android.view.Surface

以下是示例: http://androidxref.com/5.1.0_r1/xref/frameworks/base/tests/HwAccelerationTest/src/com/android/test/hwui/HardwareCanvasSurfaceViewActivity.java

您可以在生产环境中使用relfecation。

答案 2 :(得分:1)

你有没有在你的Android清单中说明你的应用想要使用hw加速?

这就像是 <application android:hardwareAccelerated="true" ...>

根据您的目的,仅激活活动或窗口的加速功能可能也很有用,有关详细信息,请参阅http://developer.android.com/guide/topics/graphics/hardware-accel.html

鲁迪