1. 程式人生 > >Android : ViewPager+RecyclerView的聯動效果

Android : ViewPager+RecyclerView的聯動效果

今天有個需求,上面是一組圖片,下面也是一組圖片,要求上面和下面的圖片都能滑動,然後2者之間能聯動,通俗講就是上面的選中了下面也要跟著滑到那個圖片,然後下面的圖片滑動了上面也要跟著選中那個圖片,所以產生了聯動效果。


類似這樣的,然後我就開始想了  上面一個recyclerview 下面一個viewpager 好像可以哦,然後就開始啪啦啪啦的寫了,先把能看到的先寫出來(viewpager動態新增圖片,具體的話可以自行百度,這個比較簡單,然後稍微麻煩點的是recyclerview的橫向設定,實際上也不難,就是設定橫向的layoutmanager而已),上面放了幾張圖片,下面也是放了幾張圖片,然後就想怎麼聯動呢?

viewpager有個addOnPangeChangeListener介面。主要包括了3個方法,我們這邊只需要用到裡面的onPageSlected方法有個position可以獲取到當前是哪個圖片,然後如何聯動到recyclerview呢,想了挺久的,然後突然想起來recyclerview有個smoothScrollToPosition方法可以控制滑到到哪個position上,想到這又是啪啦啪啦的寫,這裡貼上程式碼:

然後運行了下,發現可以了,可以在下面的viewpager滑動然後控制上面的recyclerview滑到對應的圖片了,哈哈!但是,先別激動,還有個需求呢,就是可以在recyclerview裡面通過點選圖片然後下面的viewpager可以滑到對應的圖片上,這個就比較有思路了,首先獲取圖片的點選事件,(recyclerview的點選事件為什麼要自己寫呢,哎),啪啦啪啦,寫上recyclerview的點選事件(自己寫個介面然後回撥apapter裡的點選事件,不會的自行百度),然後通過viewpager的setCurrentItem設定回撥的position然後在滑到對應的圖片上,執行一下,效果不錯哦,好了,大功告成!

但是,那邊又提需求了,在上面的圖片上如果被選中要有個邊框效果,這樣才知道你被選中了(激動了,20多年了終於被選中了。),然後這個感覺也不難,就是在recyclerview的item裡面的圖片給個背景邊框唄,稍微要注意的是要選中了才有效果,所以這邊需要判斷下,看是否被選中,這邊又來到了viewpager的addOnPageChangerListener接口裡的方法,這裡可以知道下面那個圖片被選中了,然後因為關聯了上面了,所以也就能知道上面那個圖片被選中了,所以加上程式碼:


這裡的setBg()是我在介面卡裡寫的方法,為了是能在adapter裡獲取被選中圖片的position:


這裡在onBindViewHolder裡面進行選中判斷是否有邊框,然後設定邊框(忽略我的命名,為了測試嘛),注意的是判斷的時候選中的時候設定了邊框,然後在沒有選中的地方也要設定個null背景,以防止出現複用問題(ListView就是有這個問題,需要注意!!)。

好了,到這邊差不多需求已經完成了,這邊只是為了實現效果,所以一些細節我就沒去考慮了,有時間再去完善了。好了下班了!!