Re: [問題] view.View & view.Surface 關係

看板AndroidDev作者 (CHA)時間8年前 (2016/01/08 21:13), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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

01/10 01:49, , 1F
還有一個主要的區別,你如果不需要高速即時重繪圖案,
01/10 01:49, 1F

01/10 01:49, , 2F
就用普通的前者即可,否則的話,後者的實際重繪時機是
01/10 01:49, 2F

01/10 01:50, , 3F
你可以自己掌握的,可以達到流暢的動畫效果,並且不會
01/10 01:50, 3F

01/10 01:50, , 4F
使主線程阻塞
01/10 01:50, 4F

01/13 20:10, , 5F
如果是在沒有OGL的case下 硬體加速的一般view不見得比較慢
01/13 20:10, 5F

01/13 20:12, , 6F
https://goo.gl/w8BmWD 官方網站的這篇值得反覆閱讀
01/13 20:12, 6F
文章代碼(AID): #1MZxNcHL (AndroidDev)
文章代碼(AID): #1MZxNcHL (AndroidDev)