我有這種「精確」的問題:如何在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本身看起來依賴於硬件加速,但畫布繪製時畫布不能正常工作。
如果您使用的是軟件渲染,則會放棄很多性能,特別是在現代設備上。無論如何,在SurfaceView的Surface上禁用加速可能是不可能的 - 請注意http://developer.android.com/guide/topics/graphics/hardware-accel.html它說你不能禁用窗口加速。您是否嘗試禁用整個活動或應用程序的加速? – fadden
是的,我也試過這部分。這沒用,陰影依然看起來很醜。我決定放棄影子質量,並等待谷歌解決這個問題。 –
我之前的評論不正確。正如在@ shelll的答案中指出的那樣,你從SurfaceView的Surface上用lockCanvas()得到的Canvas沒有硬件加速。 – fadden