android Behavior

認(rèn)識(shí)Behavior

使用CoordinatorLayout時(shí),會(huì)在xml文件中用它作為根布局,并給相應(yīng)的子View添加一個(gè)類似app:layout_behavior="@string/appbar_scrolling_view_behavior"的屬性,當(dāng)然屬性值也可以是其它的。進(jìn)一步可以發(fā)現(xiàn)@string/appbar_scrolling_view_behavior的值是android.support.design.widget.AppBarLayout$ScrollingViewBehavior,不就是support包下一個(gè)類的路徑嘛!玄機(jī)就在這里,通過(guò)CoordinatorLayout之所以可以實(shí)現(xiàn)炫酷的交互效果,Behavior功不可沒(méi)。既然如此,我們也可以自定義Behavior,來(lái)定制我們想要的效果。

自定義Behavior可以選擇重寫以下的幾個(gè)方法有:

  1. onInterceptTouchEvent():是否攔截觸摸事件
  2. onTouchEvent():處理觸摸事件
  3. layoutDependsOn():確定使用BehaviorView要依賴的View的類型
  4. onDependentViewChanged():當(dāng)被依賴的View狀態(tài)改變時(shí)回調(diào)
  5. onDependentViewRemoved():當(dāng)被依賴的View移除時(shí)回調(diào)
  6. onMeasureChild():測(cè)量使用BehaviorView尺寸
  7. onLayoutChild():確定使用BehaviorView位置
  8. onStartNestedScroll():嵌套滑動(dòng)開(kāi)始(ACTION_DOWN),確定Behavior是否要監(jiān)聽(tīng)此次事件
  9. onStopNestedScroll():嵌套滑動(dòng)結(jié)束(ACTION_UPACTION_CANCEL
  10. onNestedScroll():嵌套滑動(dòng)進(jìn)行中,要監(jiān)聽(tīng)的子 View的滑動(dòng)事件已經(jīng)被消費(fèi)
  11. onNestedPreScroll():嵌套滑動(dòng)進(jìn)行中,要監(jiān)聽(tīng)的子 View將要滑動(dòng),滑動(dòng)事件即將被消費(fèi)(但最終被誰(shuí)消費(fèi),可以通過(guò)代碼控制)
  12. onNestedFling():要監(jiān)聽(tīng)的子 View在快速滑動(dòng)中
  13. onNestedPreFling():要監(jiān)聽(tīng)的子View即將快速滑動(dòng)

當(dāng)你在onStartNestedScroll()中返回了true之后,嵌套滾動(dòng)進(jìn)入兩個(gè)階段:
onNestedPreScroll() 會(huì)在scrolling View獲得滾動(dòng)事件前調(diào)用,它允許你消費(fèi)部分或者全部的事件信息。
onNestedScroll() 會(huì)在scrolling View做完滾動(dòng)后調(diào)用,通過(guò)回調(diào)可以知道scrolling view滾動(dòng)了多少和它沒(méi)有消耗的滾動(dòng)事件。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容