# ViewPager PagerAdapter源码分析

引言

我们知道ViewPager 如果切换的是Fragement,可以用FragmentPagerAdapter 或者 FragmentStatePagerAdapter,如果我们需要切换的是ImageView或者其他View,则需要继承使用PageAdapter,当然FragmentPagerAdapterFragmentStatePagerAdapter也是实现的PagerAdapter。所以我们来分析下PagerAdapter.

PagerAdapter使用

当我们继承使用PagerAdapter的时候需要实现四个方法:

  • instantiateItem(View container, int position) //根据postion创建page
  • destroyItem(ViewGroup container, int position, Object object) //根据postion移除page
  • getCount() //得到page数目
  • isViewFromObject(View view, Object object) //判断instantiateItem创建的View是否与某个指定类型相等。

ViewPager绘制流程

SlidePagerAdapter adapter = new SlidePagerAdapter(getSupportFragmentManager());
//extends PagerAdapter
viewPager.setAdapter(adapter);

上面是使用ViewPager的常用方式,我们来看下setAdapter后发生了什么.

  • 我们会看到setAdapter会调用populate()。然后我们来看下populate中执行了哪些方法。
# ViewPager PagerAdapter源码分析_第1张图片
populate method.jpg

startUpdate(ViewGroup container)表示ViewPager开始绘制

getCount然后获取page的数目。

我们再往下看

populate method .jpg

# ViewPager PagerAdapter源码分析_第2张图片
addNewItem.jpg

populate中会调用****addNewItem, addNewItem中调用 instantiateItem(View container, int position)创建 View

populate下面也会调用destroyItem等PagerAdapter的方法。这里我们就不做过多的介绍了。

总结

  1. ViewPager的适配器都要继承使用PagerAdapter,如果扩展滑动其他View,实现PagerAdapter即可
  2. ViewPager实现绘制的主流程在populate method中实现。

你可能感兴趣的:(# ViewPager PagerAdapter源码分析)