去除ViewPager边缘阴影效果

新版本发布一般伴随着新特性介绍,往往在第一次打开时进行分页滚动显示,自然viewpager就很合适,在viewpager滚动到边缘时,再滚动就会出现阴影,不止viewpager, scrollview 等滚动视图也是有这些效果的,去掉方法如下:
添加 android:overScrollMode="never" 到viewpager xml中
分析:
出现边缘阴影,应该是在绘制的时候出现,查看ViewPager源码 可以发现 两个 变量:
EdgeEffectCompat mLeftEdge, mRightEdge 搜索查看到draw方法中:


去除ViewPager边缘阴影效果_第1张图片
Paste_Image.png

看到如图所示代码,在else中两个都直接调用了finish() 判断条件是overScrollMode
找到ViewCompat类


去除ViewPager边缘阴影效果_第2张图片
Paste_Image.png

可以看到有三种类型,1.当前View可以滚动,2.子视图内容超过当前视图可以滚动,3.不能滚动
根据ViewCompat.getOverScrollMode(this) 一直找,可以发现最后调用了
Paste_Image.png

还是调用了view本身的getOverScrollMode()方法,在ViewPager.java中未发现有此方法,直接去ViewGroup->在View中发现
Paste_Image.png

看到这些,直接找到View.java源码


Paste_Image.png

找到读取overScrollMode的代码
可以看到此属性默认 : OVER_SCROLL_IF_CONTENT_SCROLLS
对应xml中属性为:always ifContentScrolls never 分别对应上面三种
设置 android:overScrollMode="never" 即可。
运行检验和期望一致。

同理可以处理其他有此特性的视图控件,也可以实现自定义View的滚动边缘阴影效果。

小技巧

你可能感兴趣的:(去除ViewPager边缘阴影效果)