SurfaceView中的Canvas - 硬件加速

use*_*096 12 android canvas surfaceview hardware-acceleration

我正在开发ICS并尝试理解为什么在SurfaceView中使用Canvas时Canvas.isHardwareAccelerated()将始终返回FALSE.

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

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

我在开发者选项中使用Force GPU渲染标志以及清单内部,我也指定minSDK/targetSDK> = 14.

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

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

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

谢谢

Rom*_*Guy 14

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

  • 是的仍然如此. (3认同)
  • @RomainGuy我发现了隐藏api`public Canvas lockHardwareCanvas()`但是没有看到在哪里使用它,是否有可能使用这种方法来加速SurfaceView硬件的加速? (2认同)

Juu*_*ude 5

它似乎有一个新的隐藏API方法 unlockHardwareCanvasandroid.view.Surface

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

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


nan*_*ack 1

您是否在 Android 清单中声明您的应用程序想要使用硬件加速?

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

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

鲁迪