2014-03-07 71 views
5

我有這種「精確」的問題:如何在SurfaceView中禁用硬件加速?

setShadowLayer Android API differences

我有一個球員,和敵人,我與14 API編寫。問題是:從14 API開始,默認情況下啓用硬件加速,並且在所有繪圖方法(例如,我想使用的setShadowLayer())上都不支持。所以,解決方案很簡單,就像上面提到的主題一樣。問題是:他使用View,我使用SurfaceView來獲得更好的遊戲性能。我表面觀聲明如下:

public class Screen extends SurfaceView implements Runnable { // Code } 

所以,我只是說給構造函數:

public Screen(Context context) { 
    super(context); 
    holder = getHolder(); 
    setLayerType(View.LAYER_TYPE_SOFTWARE, null); // Here. 
} 

在我SurfaceView禁用硬件加速,以使我的陰影不看uggly,和結果:整個SurfaceView停止工作。我無法顯示發生了什麼,但是當我禁用硬件加速時,它不會畫任何東西。我對此非常悲觀,因爲SurfaceView本身看起來依賴於硬件加速,但畫布繪製時畫布不能正常工作。

+1

如果您使用的是軟件渲染,則會放棄很多性能,特別是在現代設備上。無論如何,在SurfaceView的Surface上禁用加速可能是不可能的 - 請注意http://developer.android.com/guide/topics/graphics/hardware-accel.html它說你不能禁用窗口加速。您是否嘗試禁用整個活動或應用程序的加速? – fadden

+0

是的,我也試過這部分。這沒用,陰影依然看起來很醜。我決定放棄影子質量,並等待谷歌解決這個問題。 –

+0

我之前的評論不正確。正如在@ shelll的答案中指出的那樣,你從SurfaceView的Surface上用lockCanvas()得到的Canvas沒有硬件加速。 – fadden

回答

5

根據thisSurfaceView根本沒有硬件加速,所以你的問題可能在別的地方。

+0

容易辨認 - 在鎖定Surface之後調用'Canvas#isHardwareAccelerated()'。我剛剛嘗試了一個'SurfaceView'並確認它沒有硬件加速。 – fadden