Android : ViewPager+RecyclerView的联动效果

来源:互联网 发布:顶级域名的两大类 编辑:程序博客网 时间:2024/06/05 20:28

今天有个需求,上面是一组图片,下面也是一组图片,要求上面和下面的图片都能滑动,然后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就是有这个问题,需要注意!!)。

好了,到这边差不多需求已经完成了,这边只是为了实现效果,所以一些细节我就没去考虑了,有时间再去完善了。好了下班了!!


0 0
原创粉丝点击