SurfaceView 中的画布 - 硬件加速

问题描述 投票:0回答:4

我正在 ICS 上进行开发,并试图理解为什么 当使用 Canvas.isHardwareAccelerated() 时,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 但我不会做任何事。

我在开发者选项中使用强制 GPU 渲染标志 与...一起 在清单中,我还指定了 minSDK/targetSDK >= 14。

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

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

SurfaceView 内的 Canvas 可以进行硬件加速吗?

谢谢

android canvas surfaceview hardware-acceleration
4个回答
16
投票

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


5
投票

unlockHardwareCanvas
中好像多了一个新的hide api方法
android.view.Surface

这是一个例子:


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

您可以在生产环境中使用重新反射。


1
投票

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

这就像

<application android:hardwareAccelerated="true" ...>

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

鲁迪


0
投票

更新:

从 API 级别 23 (Android 6.0) 开始,您可以通过调用 surface.lockHardwareCanvas() 获得硬件加速画布。

© www.soinside.com 2019 - 2024. All rights reserved.