SurfaceView學(xué)習(xí)筆記->什么是SurfaceView

在一般的Android程序中屑埋,UI都是在主線程處理,但是痰滋,有些可能比較復(fù)雜的動(dòng)畫會(huì)卡頓主線程摘能,如相機(jī)续崖,為了解決這個(gè)問(wèn)題,Android提供了SurfaceView团搞,即在非主線程繪制UI严望。

SurfaceView在android.view包下,從Android1.0開(kāi)始支持逻恐。

public class MySurface extends SurfaceView implements Runnable{}

從中可以看出像吻,我們?cè)谑褂?code>SurfaceView時(shí),一般是自定義一個(gè)類复隆,并繼承SurfaceViewRunnable拨匆,熟悉Java的應(yīng)該能知道,Runnable是實(shí)現(xiàn)多線程的接口挽拂,由此可見(jiàn)惭每,我們定義的MySurface有多線程的特征。

SurfaceView又是什么呢亏栈?

SurfaceView

從官方文檔看台腥,SurfaceView繼承自android.view.View,也就是說(shuō)绒北,SurfaceView也是和ImageView览爵,TextView類似的一個(gè)普通的View。

然后再看看官方對(duì)SurfaceView的介紹:

SurfaceView官方介紹

第一句提供一個(gè)嵌入在View樹(shù)镇饮,專用于繪制Surface,View樹(shù)我想大家都知道類似如下箕母,可以用Android Tool:View Hierarchy查看

View Tree

那什么是Surface呢储藐?
Surface

從中可以看到,Surface繼承自Object而不是View嘶是,且實(shí)現(xiàn)了Parcelable钙勃,可見(jiàn)Surface不是一個(gè)傳統(tǒng)意義上的View
再看看官方介紹

Surface官方介紹

介紹很簡(jiǎn)短的一句話:由屏幕顯示內(nèi)容合成器(screen compositor)所管理的原始緩沖區(qū)的句柄聂喇,從中可以看到辖源,Surface是個(gè)句柄,通過(guò)這個(gè)句柄希太,可以獲得原始緩沖區(qū)及其內(nèi)容克饶,原始緩沖區(qū)用于保存當(dāng)前窗口的像素?cái)?shù)據(jù)。

Surface的公開(kāi)方法中誊辉,可以看到有一個(gè)lockCanvas方法矾湃,傳入一個(gè)矩形區(qū)域,返回一個(gè)Canvas堕澄。
Canvas大家應(yīng)該很熟悉邀跃,從字面直譯是畫布的意思霉咨,也就是說(shuō),你可以在Canvas這塊畫布上繪制你想要的圖像拍屑,實(shí)際上也是這個(gè)用途

Surface的方法

看一下lockCanvas的介紹

lockCanvas方法介紹

Surface獲取一塊畫布用于繪制途戒,在繪制結(jié)束后,調(diào)用者必須執(zhí)行unlockCanvasAndPost(Canvas)來(lái)將新繪制的內(nèi)容發(fā)送到Surface僵驰。

再看看參數(shù)inOutDirty:調(diào)用者想要重新繪制的一塊廢棄區(qū)域喷斋,這個(gè)方法可以被用于擴(kuò)展dirty區(qū)域,比如像縮放Surface矢渊,調(diào)用者也可以傳遞null继准,如果是這樣的話,整個(gè)Surface應(yīng)該被重新繪制矮男。
unlockCanvasAndPost(Canvas)這個(gè)方法則是將Canvas中繪制的內(nèi)容發(fā)送給Surface移必。

由此可見(jiàn),雖然Surface沒(méi)有繼承自View毡鉴,但是它擁有一塊可繪制區(qū)域用于繪制內(nèi)容崔泵,但是因?yàn)樗鼪](méi)有繼承自View,所以不能直接用于View樹(shù)猪瞬。

說(shuō)到這里憎瘸,應(yīng)該能明白SurfaceView是什么了吧,接著看SurfaceView官方文檔:

You can control the format of this surface and, if you like, its size; the SurfaceView takes care of placing the surface at the correct location on the screen:“你可以控制Surface的格式陈瘦,甚至尺寸幌甘,和位置”,從這里可以看出痊项,SurfaceView存在的意義就是將不可以插入View hierarchy的Surface轉(zhuǎn)為可以插入的SurfaceView锅风。

The surface is Z ordered so that it is behind the window holding its SurfaceView; the SurfaceView punches a hole in its window to allow its surface to be displayed. The view hierarchy will take care of correctly compositing with the Surface any siblings of the SurfaceView that would normally appear on top of it. This can be used to place overlays such as buttons on top of the Surface, though note however that it can have an impact on performance since a full alpha-blended composite will be performed each time the Surface changes.
Surface是在Z軸的,所以它應(yīng)該在SurfaceView的底部鞍泉,SurfaceView在自己身上打了個(gè)洞以便讓Surface能被看到皱埠,View hierarchy會(huì)正確的顯示Surface的位置,其他的View也可以出現(xiàn)在它的上方咖驮,這可以用于將一個(gè)按鈕放置在Surface的上方边器,需要注意的是,將一個(gè)透明的按鈕放置在Surface的上方托修,每次Surface的變化都會(huì)導(dǎo)致按鈕的重新繪制忘巧。

再看看這句Access to the underlying surface is provided via the SurfaceHolder interface, which can be retrieved by calling getHolder()“需要訪問(wèn)底層的Surface,你可以通過(guò)提供的SurfaceHolder來(lái)訪問(wèn)诀黍,SurfaceHolder可以通過(guò)getHolder()得到”袋坑。

The Surface will be created for you while the SurfaceView's window is visible; you should implement surfaceCreated(SurfaceHolder) and surfaceDestoryed(SurfaceHolder) to discover when the Surface is created and destroyed as the window is shown and hidden.
只有SurfaceView可見(jiàn)是,Surface才會(huì)被創(chuàng)建,你可以繼承surfaceCreatedsurfaceDestoryed獲得枣宫。

到此婆誓,SurfaceView是什么應(yīng)該能明白了吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末也颤,一起剝皮案震驚了整個(gè)濱河市洋幻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翅娶,老刑警劉巖文留,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異竭沫,居然都是意外死亡燥翅,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門蜕提,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)森书,“玉大人,你說(shuō)我怎么就攤上這事谎势×莞啵” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵脏榆,是天一觀的道長(zhǎng)猖毫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)须喂,這世上最難降的妖魔是什么吁断? 我笑而不...
    開(kāi)封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮坞生,結(jié)果婚禮上胯府,老公的妹妹穿的比我還像新娘。我一直安慰自己恨胚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布炎咖。 她就那樣靜靜地躺著赃泡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乘盼。 梳的紋絲不亂的頭發(fā)上升熊,一...
    開(kāi)封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音绸栅,去河邊找鬼级野。 笑死,一個(gè)胖子當(dāng)著我的面吹牛粹胯,可吹牛的內(nèi)容都是我干的蓖柔。 我是一名探鬼主播辰企,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼况鸣!你這毒婦竟也來(lái)了牢贸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤镐捧,失蹤者是張志新(化名)和其女友劉穎潜索,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體懂酱,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竹习,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了列牺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片整陌。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖昔园,靈堂內(nèi)的尸體忽然破棺而出蔓榄,到底是詐尸還是另有隱情,我是刑警寧澤默刚,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布甥郑,位于F島的核電站,受9級(jí)特大地震影響荤西,放射性物質(zhì)發(fā)生泄漏澜搅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一邪锌、第九天 我趴在偏房一處隱蔽的房頂上張望勉躺。 院中可真熱鬧,春花似錦觅丰、人聲如沸饵溅。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜕企。三九已至,卻和暖如春冠句,著一層夾襖步出監(jiān)牢的瞬間轻掩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工懦底, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留唇牧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像丐重,于是被迫代替她去往敵國(guó)和親腔召。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容