Android 自定義 TabLayout

TabLayout 的兩種交互方式

TabLayout 有兩種交互方式,第一種是經過滑動來選擇 Tab,第二種是經過點擊來選擇 Tab。所以,當你在實現自定義 TabLayout 時,首先要保證本身對原組件的擴展可以同時支持這兩種交互方式,其次要注意本身的擴展可以複合這兩種交互方式的特色。繼承

需求

  1. 全部的 Tab 都由標題和色塊組成;不管 Tab 是否被選中,標題的位置都位於整個 Tab 的正中;當 Tab 未被選中時,色塊的高度較低,在視覺上位於標題的下面;當 Tab 被選中的時候,色塊的高度較高,在視覺上包裹了標題;當 Tab 在未選中狀態和選中狀態之間切換時,色塊的高度逐漸變高或逐漸變低,文字的顏色組件變白或變黑。接口

  2. 滑動時,Tab 的漸變過程應該是由用戶控制的,用戶滑動的快慢對應漸變的快慢。擴展

  3. 點擊時,Tab 的漸變過程應該是不受用戶控制的,當用戶執行完點擊操做後,原來的 Tab 進入反向漸變過程,被點擊的 Tab 進入正向漸變過程。方法

  4. 須要提供的接口包括:設置 ViewPager 的接口;設置選中 Tab 的接口;增刪 Tab 後更新自定義 TabLayout 視圖的接口。移動

分析

  1. TabLayout 和 ViewPager 的配合 —— 當滑動時,經過 ViewPager 的原有 API 去更新 TabLayout 的視圖:經過重寫 onPageScrolled 方法實現 Tab 上的漸變效果;經過重寫 onPageSelected 方法實現 Tab 的移動居中。交互

  2. TabLayout 和 ViewPager 的配合 —— 當點擊時,經過 TabLayout 的自定義 API 去更新 ViewPager 的視圖:經過獲取點擊的 Tab 的下標來選中 ViewPager 的指定 Page。居中

  3. 色塊應該是一個繼承自 View 的類,能夠設置高度和背景顏色,並提供讓高度漸變的接口(原始高度、最終高度、漸變類型);重寫 onDraw 方法,根據不斷改變的高度繪製不一樣高度的色塊。
    (待續)顏色

相關文章
相關標籤/搜索