昨天做的那个联动,​​SprintNBA项目模仿笔记(三)如何做一个优秀的tab标签-ViewPager联动​​,测试后发现闪屏问题,今天解决,进行补充。

bug详情:当viewpager滑动后,间接会调用setTab,时间是viewpager滑动到左边一个标签抬起后圆角背景闪烁了一次。

分析原因,定然是圆角背景的left问题,于是对left进行日志输出,果然,setTab后出现了问题,setTab后,left值第一次和第二次相差很大,分析原因:
viewpager算出的offset值是针对左边标签的正向值,当反向滑动时,我需要的值和这个值相加等于一。

可能这样说会比较晕,举个栗子。

当1标签滑动到0标签时,假如滑动的情况如下:

SprintNBA模仿笔记(三)-2补充,viewpager和标签闪屏问题修复_github

viewpager滑动时,记录的position=0,offset = 20/50=0.4,newPos = 1,此时为正向计算正确。

当松手时,selectedPos = 1,newPos = 0,此时offset值还没有更新,依旧是0.4,所以这一瞬间发生了闪烁,后面的由viewpager调用方法后更新。可以看到,这里的offset值应该为0.6
所以点击事件时,加上了几句话:

if(selectedPos > newPos){
followOffset = 1.0f

解决,稍后会更新标签滚动居中同步,现在是页面变化后才滚动居中,大家一起进步ヽ( ̄▽ ̄)ノ

模仿项目地址:​​https://github.com/nfwuzhongdemeng/ImitateNBA​​​
原项目地址:​​​https://github.com/smuyyh/SprintNBA​