看板 AndroidDev 關於我們 聯絡資訊
※ 引述《Laleh (Laleh)》之銘言: : 大家好: : 最近在查 View 和 Surface 之間差異 : 因為要畫圖,部過網路上資源看得霧煞煞 : 不太懂他們之間的關係跟使用時機 : 有沒有前輩能指教一下~ : 3Q 記然是和View比又提到畫圖,我就當你問的是SurfaceView了 (因為在Android裡還有一個真的叫Surface的class) SurfaceView基本上就是直接給你一張白紙,你自己拿Canvas在上面畫東西。 另外Android會把他當成獨立圖層來處理(這是最主要的差異) 還有一點是SurfaceView的繪製工作可以跑在non-UI thread. 可以由呼叫SurfaceHolder.lockCanvas()/unlockAndPost()的時機來決定何時繪圖 設計上,View是讓你客製UI原件時繼承用的 雖然也可以畫東西,但那是透過override onDraw(Canvas canvas)來實現 主要是讓你畫這個View的"外觀"用的 而且用onDraw()來畫的話,畫圖也必定是在UI thread上做 畫圖的"時機"也沒辦法自己決定,是完全交給framework決定 大致上,根據你想顯示的內容就可以判斷你要用哪個來畫: 想做一個特殊的按鈕 => 用View 想在畫面上顯示一些三角形或幾何圖形之類的 => 用SurfaceView 至於SurfaceView的獨立圖層有什麼好處呢? 這還牽扯到framebufer composition的問題,這邊就不多說了… -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.68.240.189 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1452258790.A.455.html
kobe8112: 還有一個主要的區別,你如果不需要高速即時重繪圖案, 01/10 01:49
kobe8112: 就用普通的前者即可,否則的話,後者的實際重繪時機是 01/10 01:49
kobe8112: 你可以自己掌握的,可以達到流暢的動畫效果,並且不會 01/10 01:50
kobe8112: 使主線程阻塞 01/10 01:50
tac0wu: 如果是在沒有OGL的case下 硬體加速的一般view不見得比較慢 01/13 20:10
tac0wu: https://goo.gl/w8BmWD 官方網站的這篇值得反覆閱讀 01/13 20:12