在日常的Android开发当中,ViewPager
是我们常用的组件之一。比如我常见的应用引导页、Banner自定义控件都有可能使用ViewPager来实现。这篇博客分享一下,我了解到的ViewPager
知识。
ViewPager简介以及作用
ViewPager
,这个类可以让用户切换当前的View
。
- ViewPager类直接继承了ViewGroup类,所以它是一个容器类,可以在其中添加其他View类。
- ViewPager类需要一个PagerAdapter适配器类给它提供数据。
- ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。
ViewPager的使用
ViewPager的功能就是可以使视图滑动,就像Lancher左右滑动那样。分三个步骤来使用它:
- 在XML文件中加入;
- 加载要显示的页卡;
- 在Activity里实例化ViewPager组件,并且设置Adapter(PagerAdapter,方法与ListView一样的),在这里一般需要重写PagerAdapter。)
XML使用示例
<androidx.viewpager.widget.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
监听事件设置
vp.addOnPageChangeListener(object :ViewPager.OnPageChangeListener{
override fun onPageScrolled( position: Int,positionOffset: Float,positionOffsetPixels: Int) {
// position,当前页面
// positionOffset,移动页面的百分比
// positionOffsetPixels,移动的像素点
}
override fun onPageSelected(position: Int) {
// 当页面被选中
}
override fun onPageScrollStateChanged(state: Int) {
// 滑动状态发生改变
}
})
ViewPager的适配器
上面有提到提到了PagerAdapter,和ListView等控件使用一样,需要ViewPager设置PagerAdapter来完成页面和数据的绑定,这个PagerAdapter是一个基类适配器,我们经常用它来实现App引导页,它的子类有FragmentPagerAdapter和FragmentStatePagerAdapter,这两个子类适配器用于和Fragment一起使用,在App中它们就像Listview一样出现的频繁。
实现一个最基本的PagerAdapter,必须实现下面的四个方法,在代码中有注释出来:
public class MyAdapter extends PagerAdapter{
private List<View> list;
public MyAdapter(List<View> list){
this.list = list;
}
@Override
public int getCount() {
//必须实现,返回要展示的图片数量
return list.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
//必须实现
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
//必须实现,实例化
container.addView(list.get(position));
return list.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//必须实现,销毁
container.removeView(list.get(position));
}
}