去除ViewPager边缘阴影效果

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


Paste_Image.png

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


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的滚动边缘阴影效果。

小技巧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,175评论 25 708
  • 内容抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新...
    皇小弟阅读 46,878评论 22 665
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,224评论 4 61
  • 由于每次打包发布、run项目切换项目环境搞的整个人心烦气躁。在花费了数天时间研究gradle本地配置,终于不用再更...
    被咯苏州阅读 1,000评论 0 0
  • 很多人问我蜂蜜蜂蜜为什么会结晶? 其实原因很简单,因为蜂蜜的主要的成份是果糖和葡萄糖!结晶的实质是葡萄糖从蜂蜜中析...
    予流阅读 493评论 0 0