我正在 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 可以进行硬件加速吗?
谢谢
由
SurfaceView.lockCanvas()
返回的 Canvas 目前无法进行硬件加速。
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
您可以在生产环境中使用重新反射。
您是否在 Android 清单中声明您的应用程序想要使用硬件加速?
这就像
<application android:hardwareAccelerated="true" ...>
根据您想要执行的操作,仅为活动或窗口激活加速也可能很有用,请参阅 http://developer.android.com/guide/topics/graphics/hardware-accel.html 了解详细信息。
鲁迪
更新:
从 API 级别 23 (Android 6.0) 开始,您可以通过调用 surface.lockHardwareCanvas() 获得硬件加速画布。