Android开发

Android-ViewPager详解

2021-12-26  本文已影响0人  阿博聊编程
图片来源于网络

在日常的Android开发当中,ViewPager是我们常用的组件之一。比如我常见的应用引导页、Banner自定义控件都有可能使用ViewPager来实现。这篇博客分享一下,我了解到的ViewPager知识。

ViewPager简介以及作用

ViewPager,这个类可以让用户切换当前的View

  1. ViewPager类直接继承了ViewGroup类,所以它是一个容器类,可以在其中添加其他View类。
  2. ViewPager类需要一个PagerAdapter适配器类给它提供数据。
  3. ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

ViewPager的使用

ViewPager的功能就是可以使视图滑动,就像Lancher左右滑动那样。分三个步骤来使用它:

  1. 在XML文件中加入;
  2. 加载要显示的页卡;
  3. 在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));
    }
}
上一篇 下一篇

猜你喜欢

热点阅读