背景:今天遇到一個問題,那就是現(xiàn)有的代碼中關(guān)于TabLayout,在沒有添加viewpager的情況下,要求實現(xiàn)滑動監(jiān)聽,當(dāng)滑動到最右邊的時候,需要隱藏響應(yīng)的陰影。
思路: 找了一圈,TabLayout并沒有scrollListener 的相關(guān)API實現(xiàn),只有OnTabSelectedListener,但是OnTabSelectedListener中只是對選中,未選中狀態(tài)的一個處理。
嘗試解決: 1. 往外層套一個ScrollView,發(fā)現(xiàn)ScrollView也進入不到scrollListener,因為事件傳遞被截斷了(不可行)
2. 監(jiān)聽treeViewObser ,當(dāng)發(fā)生偏移量變化的時候再去判斷元素(可行)
解決代碼:
firstTabLayout.viewTreeObserver.addOnScrollChangedListener {
val scrollX: Int = firstTabLayout.scrollX // Current x scrolling position
val maxScrollX = firstTabLayout.getChildAt(0)?.width?.minus(firstTabLayout.width) ?: 0
if (scrollX >= maxScrollX) {
// 已滑動到最右邊
shadowView.visibility = View.INVISIBLE
} else {
shadowView.visibility = View.VISIBLE
}
}