2010-10-16 98 views
10

我一直在想如果畫布有限制邊界。關於android畫布效果的效率

我的意思是,如果我使用的功能,如drawline(), drawbitmap(), drawcircle(), 是否真的在畫布上畫一些東西,並浪費一些CPU週期?

因爲在全部繪圖功能之後,屏幕上的實際圖片打印由屏幕尺寸決定 。如果我畫出超出屏幕尺寸的東西,它就不會顯示出來。

我想通過調用大量的繪圖函數在畫布上做一些小細節,並讓我的表面「bling bling」。如果它出界,我不想使用它們,如果它們讓我的繪圖變慢。

我正在通過surfaceview的結構進行一個小遊戲,感謝您的任何建議。

例如:

我有一個機器人從一個<步行 - >乙OUTSIDE屏幕。

它需要20個繪圖功能在畫布上繪製機器人步行圖片。 如果我滾動屏幕,然後我可以看到機器人。

所以如果屏幕外的繪圖功能真的需要花費盡可能多的時間在屏幕上繪製。 我必須檢測,只有當機器人的位置可以被用戶看到,然後我畫。 否則,我不知道。

如果繪圖功能不會浪費太多CPU週期,那麼即使當前屏幕無法看到機器人,我也可以每次繪製。

回答

5

您的畫布由您的位圖(2D)或openGL(3D,我沒有經驗)支持。在畫布上繪製的所有圖形都會剪切到裁剪矩形,您可以將它們成長,縮小,與新矩形或路徑等相交。因此,在繪製到畫布之前,您確實想要管理裁剪矩形,特別是在支持一個大的位圖。如果剪輯到等於屏幕大小的區域,則可以節省CPU週期。如果你的遊戲是一個滾動類型的遊戲,你可以剪輯到一個大於屏幕尺寸的區域並平移,偶爾畫出屏幕來更新屏幕上的區域。如果您的遊戲在所有方向都有無限滾動,那麼您將需要多個小畫布,您可以在主中央畫布的周圍繪製多個小畫布,並根據滾動遊戲的方向從左至右,從上至下翻轉它們。帶有一個畫布的一個大型位圖對於小型設備來說可能具有太大的內存佔用空間。

13

當畫布覆蓋整個屏幕時,可以加速畫布繪製的另一件事是使用沒有背景的主題。默認主題至少有一個可繪製的背景色,並且當您將視圖放在頂部時,即使視圖填滿了整個屏幕,也會導致繪製時間變慢。

使用一個主題,如:

<style name="Theme.NoBackground" parent="android:Theme"> 
     <item name="android:windowBackground">@null</item> 
    </style> 
</resources> 

羅曼蓋伊有這種現象在http://www.curious-creature.org/2009/03/04/speed-up-your-android-ui/

+0

一個偉大的描述你怎麼做到這一點,如果有是純粹的自定義繪製(即沒有xml文件附後) ? – 2012-01-23 17:56:02

+1

這真棒,所以一個巨大的改善 – pt123 2014-02-04 02:54:44