我的效果
吸頂關鍵點:
- 根據滑動距離動態改變tabLayout的父容器
- 根據滑動距離動態改變懸浮tab的背景色
- 錨點切換關鍵點參考另一篇文章android錨點優化
關鍵點代碼:
if (y >= headerH) {
//滑動的距離大於頭部佈局的高度,切換tabLayout的父佈局爲scrollview外部的tab容器
if (frame_dynamic_view.getParent() != ll_out_bar) {
ll_inside_bar.removeView(frame_dynamic_view);
ll_out_bar.addView(frame_dynamic_view);
ll_out_bar.setBackgroundColor(getResources().getColor(R.color.white));
}
} else {
//滑動的距離小於頭部佈局的高度,切換tabLayout的父佈局爲scrollview內部的tab容器
if (frame_dynamic_view.getParent() != ll_inside_bar) {
ll_out_bar.removeView(frame_dynamic_view);
ll_inside_bar.addView(frame_dynamic_view);
ll_out_bar.setBackgroundColor(getResources().getColor(android.R.color.transparent));
}
}
if (isScroll) {
//關鍵點2:由scrollView引起的滑動後移動tabLayout高亮顯示指定的tab
if (y +tabH < ll_second.getTop()) {
setScrollPos(0);
} else if (y +tabH >= ll_second.getTop() && y + tabH< ll_third.getTop()) {
setScrollPos(1);
} else if (y + tabH>= ll_third.getTop()) {
setScrollPos(2);
}
}