2012-03-06 163 views
11

我在ICS上開發並試圖理解爲什麼在SurfaceView中使用 Canvas時Canvas.isHardwareAccelerated()將始終返回FALSE。SurfaceView中的畫布 - 硬件加速

我已經試過這樣一個非常簡單的例子: http://android-coding.blogspot.com/2011/05/drawing-on-surfaceview.html 或者這一個:http://jmsliu.com/199/android-canvas-example.html

我甚至修改他們沒有平局循環 想法,我可能在一些已經得到內部的任何帆布電話對於某些繪圖調用,不支持的HW加速操作 。 我在「不支持的繪圖操作」下檢查了此列表 developer.android.com/guide/topics/graphics/hardware-accel.html 但我沒有做任何這樣的事情。

我使用的強制GPU渲染標誌的開發人員選項 內連同 的清單裏面,還我指定minSDK/targetSDK> = 14

的View.isHardwareAccelerated將返回TRUE,而Canvas.isHardwareAccelerated將始終返回FALSE。

我見過Canvas.java硬編碼返回false爲isHardwareAccelerated(),而HardwareCanvas.java返回true。我想出於某些原因,我沒有獲得HW道路,爲什麼?

SurfaceView中的Canvas可以加速HW嗎?

感謝

回答

1

你有沒有在你的Android清單說,你的應用程序要使用硬件加速?

這會是這樣的 <application android:hardwareAccelerated="true" ...>

取決於你想做的事,也可能是有用的只能針對某項活動或窗口激活加速,見http://developer.android.com/guide/topics/graphics/hardware-accel.html瞭解詳情。通過SurfaceView.lockCanvas()返回

魯迪

+0

是的我已經在我的清單文件中聲明瞭,事實上,我可以看到View HW加速但不是Canvas。 – user1019096 2012-03-06 18:59:09

+0

我也不知道...... – nanoquack 2012-03-07 19:52:04

+0

它對我有用 – 2013-01-17 14:22:54

14

畫布不能硬件此刻加速。

+1

果凍豆(4.2.1)仍然如此嗎? – Yahma 2013-01-02 06:04:41

+3

是的,它仍然是這樣。 – 2013-01-02 18:18:16

+2

@RomainGuy我找到了隱藏API'公共Canvas lockHardwareCanvas()'但沒有看到它在哪裏使用,是否有可能使用這種方法來獲得SurfaceView硬件加速? – Juude 2015-08-24 06:33:20

3

似乎存在android.view.Surface

一個新的隱藏API方法unlockHardwareCanvas這裏是例子: http://androidxref.com/5.1.0_r1/xref/frameworks/base/tests/HwAccelerationTest/src/com/android/test/hwui/HardwareCanvasSurfaceViewActivity.java

你可以用在生產環境中relfecation。