13

我正在 ICS 上开发并试图理解为什么 Canvas.isHardwareAccelerated() 在 SurfaceView 中使用 Canvas 时总是返回 FALSE。

我尝试了一个非常基本的示例,例如: http://android-coding.blogspot.com/2011/05/drawing-on-surfaceview.html 或者这个:http : //jmsliu.com/199/android-画布-example.html

我什至将它们修改为在绘图循环中没有任何画布调用,认为我可能在某些绘图调用中获得了一些不受支持的硬件加速操作。我在“不支持的绘图操作”developer.android.com/guide/topics/graphics/hardware-accel.html 下检查了这个列表,但我没有这样做。

我在开发人员选项和清单中使用了 Force GPU 渲染标志,我还指定了 minSDK/targetSDK >= 14。

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

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

SurfaceView 中的 Canvas 可以硬件加速吗?

谢谢

4

3 回答 3

15

由返回的 CanvasSurfaceView.lockCanvas()目前无法进行硬件加速。

于 2012-03-30T21:43:26.843 回答
5

似乎有一个新的隐藏api unlockHardwareCanvas方法android.view.Surface

这是一个例子: http://androidxref.com/5.1.0_r1/xref/frameworks/base/tests/HwAccelerationTest/src/com/android/test/hwui/HardwareCanvasSurfaceViewActivity.java

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

于 2015-03-20T11:24:50.700 回答
1

你有没有在你的 android manifest 中声明你的应用想要使用硬件加速?

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

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

鲁迪

于 2012-03-06T18:13:41.760 回答