仿天貓App實現商品列表佈局切換效果
昨天有朋友問了我這樣一個需求,就是在天貓App中首頁進入搜尋介面,搜尋出的商品頁中,有一個按鈕可以切換商品列表的佈局。沒有用過或者用的少天貓App的趕緊下載體驗下(哈哈,給天貓打個廣告~)。如果你很懶不想去下載的話,OK,我們來看下面這兩幅圖:
上面兩幅截圖分別是點選右上角按鈕後兩種不同佈局的效果。簡單的流程可以概括為:第一次進入頁面,有個預設的佈局,才是點選按鈕,由豎直的線性佈局切換到網格佈局,也可以叫做瀑布流式佈局。看到這裡大家是不是迫不及待得想體驗下了。坐好了嗎,開車~
首先,看下我們今天要實現的效果圖:
可以看到上面兩幅圖是我們要實現的效果,UI非常簡單,右上角按鈕醜陋的外表卻又是今天不可或缺的主角。基本的功能也很簡單,就是點選按鈕在兩個不同的佈局間切換。
下面,我們就進入今天的正題。
可以看到商品展示的形式都是以列表的方式來展現。Android中列表控制元件很多了:ListView,GridView,ExpandableListview以及V7裡面的RecyclerView等等。上述的形式都可以輕鬆的配合Adapter資料介面卡來完美實現一個列表功能。那麼,我們今天的這個效果又該如何實現呢?(賣關子開始。。)
早上的時候,提出這個需求的朋友說使用了兩個RecyclerView實現了這個效果。兩個RecyclerView分別對應兩個Adapter、兩個佈局。當時聽了,我的內心是崩潰的。這樣的設計方案在實際的App開發中是絕對不行的。如果單純的為 了實現這個功能,那麼可以理解。但是實際應用當中,資料都來自伺服器,那麼我們為了這麼一個切換功能,還要去多請求一次伺服器嗎,多儲存一些不必要的欄位嗎?顯然這種設計方案是不行的。
相信使用過列表多佈局方案的童靴都比較熟悉了,對哇。這不就是兩個不同佈局一個列表的升級版嗎。並且,V7包中的RecyclerView強大的功能也支援了可以在不同佈局之前的切換功能(LinearLayout,GridLyout,Stragged等等。。)。說到這,相信大家都想到了RecyclerView的佈局管理器:LayoutManager。沒錯!就是它了!
RecyclerView的setLayoutanager()方法可以讓其佈局在不同的排列方式間進行切換,常見的:從線性佈局到網格佈局、瀑布流。上面我們要實現的效果,其實就是從線性佈局到網格佈局的一個格式轉換。看到這,相信大家都明白了。原來是一個方法就能解決的事啦~ 哈哈,還別高興的太早了。
如果是簡單的格式切換,利用上面的方式就已經完成了這種效果。但是細心的朋友可能發現了,我們的效果在切換前和切換後的Item佈局是不一樣的:
線上性佈局的場景下:Item中有圖片、標題、描述。
在網格佈局的場景下:Item中有圖片、標題。
所以,如果不改變佈局Item的顯示,那麼setLayoutManager方法就已經完全勝任了。但是如果要改變不同的Item佈局該怎麼辦呢?下面我們一一道來。
在部落格剛開始的時候,我提到了列表多佈局的方式。這種場景相信大家都不陌生,每天我們都在使用的WeChat,聊天的對話形式就是一個列表:
看到了吧,一個列表不同的排列方式。
那麼,我們今天的效果也離不開這種方式:切換後改變Item的佈局。
RecyclerView的Adapter中有一個getItemViewType(int position)方法,來區別每一個Item的佈局。我們需要重寫該方法來實現不同的佈局方式。在重寫該方法時,返回值為Int型。
在返回值時需要注意,該值要從0開始,依次排下。否則會Crash。
利用該方法的返回值,我們就可以在onCreateViewHolder方法中去根據該返回值載入不用的佈局了,然後在onBindViewHolder方法中同樣根據不同的type去繫結對應佈局的對應控制元件。
基本的實現流程,到這裡就介紹完了。總結起來原理其實也很簡單:
(1)使用RecyclerVew的setLayoutManager方法來控制列表的格式切換。
(2)重寫Adapter的getItemViewType方法來根據自己的需求返回對應的Item佈局。
有朋友說在切換的時候介面有些僵硬,直接就切換出來了。下面我們可以為RecyclerView新增Item的動畫效果。RecyclerView有一個方法叫做:setItemAnimator()。
該方法可以為RecyclerView的Item新增一些動畫效果。但是要注意的是,該方法新增的動畫效果,只有在Item的新增和刪除時才會生效。所以,我們不能用此方法來實現切換時的動畫效果。那麼我們該如何實現呢?
還記得Android3.0之後的屬性動畫吧。沒錯,屬性動畫系列中有一個佈局動畫:LayoutAnimationController。該例項可為佈局中的元件設定動畫效果。ListView和RecyclerView都為我們提供了設定動畫的方法:setLayoutAnimation()。使用該方法就可以輕鬆搞定啦~,下面是核心程式碼:
/** * 開啟動畫 */ private void startAnimation(int anim) { LayoutAnimationController lac = new LayoutAnimationController(AnimationUtils.loadAnimation(this,anim)); //動畫執行順序 lac.setOrder(LayoutAnimationController.ORDER_RANDOM); //將佈局動畫設定到RecyclerView rv.setLayoutAnimation(lac); //啟動動畫 rv.startLayoutAnimation(); }在切換佈局的方法中呼叫該方法傳入動畫anim,就搞定啦。
OK,本篇部落格就到這了。最後附上原始碼,有問題的朋友及時給我留言。thks!
相關文章
- Vue 全家桶仿原生App切換效果和頁面快取實踐VueAPP快取
- Android 動態佈局實現多主題切換Android
- 專案常用效果!Flutter仿頭條頂部tab切換實現!Flutter
- flex佈局---標籤切換Flex
- 用CSS實現Tab頁切換效果CSS
- activity切換無動畫效果的實現動畫
- Flutter仿頭條頂部tab切換實現Flutter
- 網頁佈局------輪播圖效果實現網頁
- 【佈局進階】巧用 :has & drop-shadow 實現複雜佈局效果
- Android 高仿騰訊新聞視訊切換效果Android
- Android帶你實現門票佈局效果Android
- vue全家桶仿某魚部分佈局以及功能實現Vue
- javascript仿天貓加入購物車動畫效果JavaScript動畫
- 簡單實現一個全面屏切換效果
- vue2.0實現底部導航切換效果Vue
- html兩種方法來實現tab切換效果HTML
- 點選按鈕實現狀態切換效果
- 點選按鈕實現圖片切換效果
- Vue實現內部元件輪播切換效果Vue元件
- 微信小程式-uniapp-切換tab時資料列表如何切換?微信小程式APP
- Material之Behavior實現支付寶密碼彈窗 仿淘寶/天貓商品屬性選擇密碼
- IOS 仿頭條佈局iOS
- CSS實現頁面切換時的滑動效果CSS
- 滑鼠懸浮實現圖片動畫上下切換效果動畫
- 在多個遊戲檢視間切換實現效果遊戲
- 使用ViewPager和TabLayout來實現滑動切換效果ViewpagerTabLayout
- 商品顯示模式切換模式
- js點選實現多圖順序切換和迴圈切換效果程式碼JS
- 高階UI特效之仿3D翻轉切換效果UI特效3D
- 強大的CSS:實現平行四邊形佈局效果CSS
- css模擬實現手機通訊錄佈局效果CSS
- Android 實現APP可切換多語言AndroidAPP
- jquery實現的具有漸變效果的圖片切換jQuery
- css3實現手機效果的“切換標籤”CSSS3
- JQuery實現簡單美觀的圖片切換效果jQuery
- 線上直播系統原始碼,實現搜尋後介面顯示商品列表效果原始碼
- CSS 列表項佈局技巧CSS
- 佈局總結-水平居中佈局的實現