如題膀斋,項(xiàng)目中有一個(gè)需求,就是 CoordinatorLayout 嵌套的布局下痹雅,點(diǎn)擊下方的 Tab概页,切換,并展示整屏练慕。
如上圖:點(diǎn)擊下方的 視頻、文章的時(shí)候技掏,頂部自動(dòng)向上滑動(dòng)铃将,展示全屏,請(qǐng)看效果圖
那么這個(gè)怎么做呢哑梳?
其實(shí)關(guān)鍵的代碼邏輯是CoordinatorLayout.Behavior
中setTopAndBottomOffset()
方法
首先這個(gè)方法位于
所以要執(zhí)行這個(gè)方法劲阎,必須保證 當(dāng)前操作的 view 的父容器是 CoordinatorLayout
我們來看一下這個(gè)方法官網(wǎng)的介紹
是不是白看,哈哈鸠真,其實(shí)看名字大概知道一二了悯仙,就是通過這個(gè)方法去設(shè)置頂部的偏移量。
不過需要注意的是吠卷,這里設(shè)置的值不是滾動(dòng)量锡垄,而是偏移量,我們想讓控件往上滾祭隔,說明要傳入一個(gè)負(fù)值货岭。
提供一下我的方法
public void scrollToTop(){
//拿到 appbar 的 behavior,讓 appbar 滾動(dòng)
ViewGroup.LayoutParams layoutParams = binding.appbar.getLayoutParams();
CoordinatorLayout.Behavior behavior =
((CoordinatorLayout.LayoutParams) layoutParams).getBehavior();
if (behavior instanceof AppBarLayout.Behavior) {
AppBarLayout.Behavior appBarLayoutBehavior = (AppBarLayout.Behavior) behavior;
//拿到下方tabs的y坐標(biāo),即為我要的偏移量
float y = binding.tabs.getY();
//注意傳遞負(fù)值
appBarLayoutBehavior.setTopAndBottomOffset((int) -y);
}
}
然后將此方法,放置于 切換 Tab 的監(jiān)聽中千贯,即能實(shí)現(xiàn)上方流程屯仗。
ps: 感謝 谷歌哥哥的評(píng)論,我試了一下搔谴,他的方案更好
使用方法非常簡(jiǎn)單:
/**
* 參數(shù)一:是否展開
* 參數(shù)二:是否帶動(dòng)畫
*/
binding.appbar.setExpanded(false,true);
即可魁袜,源碼:
public void setExpanded(boolean expanded, boolean animate) {
this.setExpanded(expanded, animate, true);
}
這樣就能實(shí)現(xiàn)動(dòng)畫效果了,很棒棒哦敦第,怪我沒有好好閱讀源碼峰弹。。申尼。