CoordinatorLayout的效果實(shí)現(xiàn)的關(guān)鍵--Behavior

原版解釋請(qǐng)參考google developer的文章

使用CoordinatorLayout只能使用design Library里面的控件來(lái)實(shí)現(xiàn)炫酷的效果紧显,如果你使用的是以前老的控件,那么他和FrameLayout沒(méi)有任何的區(qū)別。

CoordinatorLayout的不同之處在哪里呢,它的不同來(lái)源于CoordinatorLayout.Behaviors,通過(guò)這個(gè)Behavior可以截取觸摸事件葛峻,屏幕插入,測(cè)量尺寸巴比,添加布局术奖,滾動(dòng)嵌套。

創(chuàng)建一個(gè)Behavior:


創(chuàng)建一個(gè)Behavior

這里使用的是泛型來(lái)新建Behavior轻绞,當(dāng)然你也可以指定為某個(gè)特定的View類型采记。

特定類型

Behavior怎么才會(huì)工作呢:

?they need to be attached to a child View of a?CoordinatorLayout?to actually be called. 就是說(shuō)需要附加在CoordinatorLayout的子View上才會(huì)被調(diào)用。

一? :在程序中:當(dāng)你覺(jué)得CoordinatorLayout的每一個(gè)View都需要附加Behavior的時(shí)候使用政勃。Behavior其實(shí)是存放在View的LayoutParams上的唧龄,只有CoordinatorLayout的直接ziView才有存放Behavior的類。這也是為什么Behavior必須聲明在CoordinatorLayout的直接子類上奸远,因?yàn)橹挥蠧oordinatorLayout的直接子View才會(huì)有Behavior-storing 類既棺,它是LayoutParams的一個(gè)子類(Behavior-storing?subclass of LayoutParams)。

在程序中聲明

在上面的例子中懒叛,使用的是默認(rèn)的無(wú)參構(gòu)造函數(shù)援制,當(dāng)然可以根據(jù)需要來(lái)傳遞自己需要的參數(shù)。

二 :在XML中使用

就一句

FancyBehavior(Context context, AttributeSet attrs)?constructor is always the one called芍瑞,意思是說(shuō)在xml里面的這一句調(diào)用的是這個(gè)有參的構(gòu)造函數(shù)構(gòu)造的對(duì)象晨仑。你還可以自定義屬性(attributes)然后從xml的attributeSet中提取出來(lái)——如果你想通過(guò)xml來(lái)定制特殊功能的Behavior這是非常重要的。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?注意:自定義xml屬性的命名的規(guī)范類似于布局xml(layout_naming),自定義Behavior的xml屬性的命名規(guī)范為behavior_prefix.

三 :自動(dòng)附加到自定義控件(其實(shí)就是繼承FrameLayout,再添加個(gè)Behavior)

其實(shí)看到這里洪己,我們也明白了妥凳,其實(shí)CoordinatorLayout其實(shí)就是給FrameLayout添加一個(gè)Behavior,而直接使用系統(tǒng)的CoordinatorLayout其實(shí)就是使用了系統(tǒng)定義的Behavior答捕。(這樣使用調(diào)用的是默認(rèn)的構(gòu)造方法)逝钥。


攔截觸摸事件

攔截觸摸事件是Behavior做的事情之一,我們知道拱镐,其實(shí)所有的Layout都繼承于ViewGroup艘款。在不是CoordinatorLayout的ViewGroup中,攔截觸摸事件都在ViewGroup的子類中進(jìn)行(具體請(qǐng)看ViewGroup事件處理)沃琅。

但是在CoordinatorLayout中哗咆,CoordinatorLayout通過(guò)把ViewGroup的onInterceptTouchEvent()轉(zhuǎn)移到Behavior的onInterceptTouchEvent()中,如果這個(gè)方法返回為true益眉,Behavior將在onTouchEvent()?獲取到所有的touch events晌柬。所有的CoordinatorLayout的子View都不需要知道做什么,這也是為什么SwipeDismissBehavior?能應(yīng)用在所有的View上的原因郭脂。

如果你想阻斷所有的交互年碘,blocksInteractionBelow()?方法返回true即可。阻斷了觸摸事件之后可能還需要有個(gè)不可觸摸的明顯提示展鸡,這就是為什么blocksInteractionBelow()?方法依賴于getScrimOpacity()?的原因屿衅。getScrimOpacity()?返回一個(gè)不為零的數(shù)值并且覆蓋一層顏色在View上,以此來(lái)提示view不可觸摸莹弊,提升用戶體驗(yàn)涤久。

攔截窗口的插圖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市箱硕,隨后出現(xiàn)的幾起案子拴竹,更是在濱河造成了極大的恐慌悟衩,老刑警劉巖剧罩,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異座泳,居然都是意外死亡惠昔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門挑势,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)镇防,“玉大人,你說(shuō)我怎么就攤上這事潮饱±囱酰” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)啦扬。 經(jīng)常有香客問(wèn)我中狂,道長(zhǎng),這世上最難降的妖魔是什么扑毡? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任胃榕,我火速辦了婚禮,結(jié)果婚禮上瞄摊,老公的妹妹穿的比我還像新娘勋又。我一直安慰自己,他們只是感情好换帜,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布楔壤。 她就那樣靜靜地躺著,像睡著了一般膜赃。 火紅的嫁衣襯著肌膚如雪挺邀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天跳座,我揣著相機(jī)與錄音端铛,去河邊找鬼。 笑死疲眷,一個(gè)胖子當(dāng)著我的面吹牛禾蚕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狂丝,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼换淆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了几颜?” 一聲冷哼從身側(cè)響起倍试,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛋哭,沒(méi)想到半個(gè)月后县习,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谆趾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年躁愿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沪蓬。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彤钟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跷叉,到底是詐尸還是另有隱情逸雹,我是刑警寧澤营搅,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站梆砸,受9級(jí)特大地震影響剧防,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辫樱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一峭拘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狮暑,春花似錦鸡挠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至缔逛,卻和暖如春备埃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背褐奴。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工按脚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敦冬。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓辅搬,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親脖旱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子堪遂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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