使用viewpager实现列表位置再屏幕中间的横向滑动列表。

678 阅读2分钟

前段时间,项目里面有这样一个需求,需求大概是这样的。

底下三个tab,tab底下一个圆,然后圆是固定的,tab是可以从中间往左滑动的。比如滑动后的效果是这样。

图画的有点丑,大概就是这么个意思把。

当时看到这个需求的时候,脑海中没想到什么特别好的办法,然后第一想到的,就是用动画左右平移。但是用动画来看,显然有点麻烦。这样要计计算每个控件滑动的长度。每个控件,要对应两种场景。而且,就算是这样完成了,也没有什么比较高的拓展性。

后来,一个同事点醒了我。

再说之前,先来说一下控件的两个属性。

clipchildren : 意思是否限制子元素再父元素中绘制。意思差不多如下图。 如果设置了clipchildren后,那么,textview可以超过viewpager的大小绘制。不过,有点坑的是,如果单纯的作为列表展示的话,设置clipchildren没什么问题。但是如果要作为点击事件的话,有点麻烦。目前我没找到办法。 然后又派生出了另外一个属性:clipToPadding cliptoPadding这个属性,意思就是可以在padding的区域里面绘制。 所以,我的实现方式很简单。 设置一个viewpager,viewpager的宽度设置为整个屏幕的宽度。简单的布局如下。 然后动态的设置padding。 布局的设置也很简单。如下图: 下面的textView可以随便换成一个点。

剩下的代码实现,实际上就是viewpager动态的添加控件的过程。

这里最主要的是动态的设置padding,来控制控件的宽度。

至于剩下的动态添加控件,活着来设置一个viewpageradapter,就是一个很简单的过程了。

其实,这整个过程很简单。但是主要是基础点卡主了我的思路。

包括其实不用viewpager,用listview或者recyclerView都是可以的。不过稍微麻烦点的就是设置滑动一个item的距离就可以。