Android-仿豌豆莢首頁導航實現

jopen 9年前發布 | 37K 次閱讀 Android Android開發 移動開發

1:結果圖:

Android-仿豌豆莢首頁導航實現

2: 實現思路:

2.1:UI層次框架:

Android-仿豌豆莢首頁導航實現

如 圖所示:最低層為RelativeLayout,第二層為ScrollView,第三層為頂部的祝導航欄。IndexNavigator是在 ScrollView層上,會跟著一起滑動。而MainNavigator則是一直呆在頂部。我的實現思路就是監聽ScrollView的活動情況來調整 IndexNavigator的布局,讓IndexNavigator和MainNavigator完全重合。

2.2:有關ScrollView滑動的一些屬性:

Android-仿豌豆莢首頁導航實現

如圖(一次滑動)所示:

ScrollView滑動的距離是滾動條上端到ScrollView頂部的距離,在這里我稱呼為ScrollTop。一次用戶滑動操作會觸發很多次OnScrollChange事件,這也正是我們可以在手指觸碰屏幕的過程中定義動畫的基礎事件,在這里我們把一次ScrollView的滑動定義為內部觸發的一次OnScrollChange事件,那么,一次滑動的距離就會和用戶的滑動的速度有關,當然,ScrollView內部已經幫我們處理好了最后的結果,我們只需要在回調OnScrollChange方法里取出來就行了。

好, 讓我們一起先來研究一下OnScrollChange方法回調回來的回傳參數究竟有哪些情況存在吧。這個方法是在ScrollView內部的一個 protected方法,因此我們需要使用一個簡單的類繼承它,然后開放出來。這個很簡單,就演示代碼了,我們重點研究這個方法的回傳參數:onScrollChanged(int newLeft, int newTop, int oldLeft, int oldTop)

經過觀察打印結果后分析,對于ScrollView滑動經過的一片小區域,一次滑動一共可能出現的情況有:

Android-仿豌豆莢首頁導航實現

假 定我們現在的方向為上下滑動,其中,綠色框可以理解為固定在屏幕中的一塊區域,箭頭為滑動方向,newTop為箭頭的頂部到ScrollView頂部的距 離,oldTop為箭尾到ScrollView頂部的距離。那么一次滑動的情況可能出現的結果就如上圖所示的六種情況之一。

2.3:動畫分解

Android-仿豌豆莢首頁導航實現

通 過觀察豌豆莢的動畫效果,我分解出來了這四個步驟的動畫,在整個滑動過程中,下面的導航欄其實和上面的主導航欄是兩個不同的View層,也就是對應上面 UI層圖的IndexNavigator和MainNavigator部分,是通過使二者重合,然后以相同的垂直速度移動達到的效果。

1:字體消失:這里我通過改變TextView的TextColor值來實現。

2:移動View組件:其實就是改變每個View的Margin或者Padding值來實現。

3:源碼地址

第一次在gitbug上傳代碼:https://github.com/YeDaxia/WanDaoJiaIndex


博客原文:http://www.darcye.com/article/44558296

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!