ViewPager 分析(章节一)

公司项目中有用到各种花里胡哨的滑动,什么左右滑动,上下滑动,惯性滚动回拉,滑动冲突。一言难尽,只能死磕viewpager。

提出问题:

  • viewpager怎样进行布局的
  • viewpager怎样滚动的
  • viewpager里面嵌套了scrollview怎样解决掉滑动冲突(效果要与网易云音乐的云村一样)
  • viewpager里面的Adapger有什么用
  • viewpager动画问题
  • viewpager怎么换成竖直方向
    等等
正文
  • viewpager怎样进行布局的
    这里解释一下是装饰布局,意思就是外面一层比如Titlebar标题栏,状态栏等,这里计算这个装饰布局的,然后再就是你正常的思路,测量viewpager里面的framgent布局,这样测量下来才正常,不然如果有装饰存在,不去测量它会导致测量不准确。测量的时候一定要考虑到内边距与外边距和偏移量的影响。
    (DecorView
    DecorView是Windows中的View的最顶层View。其实DecorView是FrameLayout的子类,它里面包含了一个存有ActionBar以及mContentParent的LinearLayout。)
    DecorView安卓视图层级
    然后我们怎么理解这个viewpager的布局,ViewPager是继承与ViewGroup,但里面的滚动和我们的Scrollview一样由Scroller来进行辅助。所以我们可以这样理解,如果你有三个fragment就是三个视图,每个视图的宽都是100%,那么你这个viewpager的宽就是300%,也可以理解成这是一个横向的Scrollview的宽为300%,那么不同的地方就在于,视图的状态,视图的缓存机制,以及视图回弹滚动效果。这样说是不是比较容易理解,当然如果你比较输入Scrollview完全可以用Scrollview手撸一个viewpager效果出来。
    下面代码中onLayout中最后一句定位代码,和滚动是一样,也可以理解为在滚动定位。 scrollToItem(mCurItem, false, 0, false);

  • viewpager怎样滚动的
    viewpager的滚动与Scrollview一样Scroller来进行辅助。用法与scrollview一致,scrollview你不会陌生,但是你想想如果你在scrollivew放置三个100%的布局,控制好它的偏移量,滚动回弹,视图缓存,那么这个滚动效果不就和viewpager一样了。我在viewpager源码中挑出了几个你比较熟悉的方法:
    其实源码中也是由用到与scollview一样的滚动

          this.scrollTo(0, 0);
		  this.completeScroll(false);
		  this.smoothScrollTo(destX, 0, velocity);

下一章节我在介绍剩下的几个问题,并且实现与网易云云村一样的上下viewpager的效果。那么这个效果实现的难度在哪里,首先在ui上是不难实现的,我们自定义viewpager重点是在管理好它的事件分发,什么时候该拦截什么时候不该拦截。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值