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

作者: cha122977 (CHA)   2016-01-08 21:13:07
※ 引述《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的問題,這邊就不多說了…
作者: kobe8112 (小B)   2016-01-10 01:49:00
還有一個主要的區別,你如果不需要高速即時重繪圖案,就用普通的前者即可,否則的話,後者的實際重繪時機是你可以自己掌握的,可以達到流暢的動畫效果,並且不會使主線程阻塞
作者: tac0wu (在BBS中流浪)   2016-01-13 20:10:00
如果是在沒有OGL的case下 硬體加速的一般view不見得比較慢https://goo.gl/w8BmWD 官方網站的這篇值得反覆閱讀

Links booklink

Contact Us: admin [ a t ] ucptt.com