翻页视图ViewPager

ViewPager控件允许页面在水平方向左右滑动,就像翻书、翻报纸,Android提供了已经分装好的控件。对于ViewPager来说,一个页面就是一个项(相当于ListView的一个列表项),许多页面组成ViewPager的页面项。

ListView和GridView的适配器使用的是BaseAdapter。ViewPager的适配器使用的是PagerAdapter

ListView和GridView的监听器使用的是OnItemClickListener。ViewPager的监听器使用的是OnPageChangeListener

下面是ViewPager三个常用方法的说明:

(1) setAdapter() 设置页面项的适配器,适配器用的是PagerAdapter及其子类。

(2)**setCurrentItem()**设置当前页码,即打开翻页视图时默认显示哪个页面。

(3) addOnPageChangeListener() 设置翻页视图的页面切换监听器。该监听器需实现接口OnPageChangeListener下的三个方法:

-1- onPageScrollStateChanged : 在页面滑动状态变化时触发。

-2- onPageScrolled: 在页面滑动过程中触发。

-3- onPageSelected : 在选中页面时,即滑动结束后触发。

1.ViewPager在XML中使用

html 复制代码
<androidx.viewpager.widget.ViewPager
    android:id="@+id/viewPager"
    android:layout_width=" ~ "
    android:layout_height=" ~ ">

    ~有翻页标题就添加部分代码~

</androidx.viewpager.widget.ViewPager>

2.每页的XML布局文件

html 复制代码
例.  res / layout / viewitem_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitCenter"/>

</androidx.constraintlayout.widget.ConstraintLayout>

3.翻页适配器 PagerAdapter

java 复制代码
例.

class MyPagerAdapter extends PagerAdapter{
    private List<View> viewList;
    public MyPagerAdapter(List<View> viewList){
        this.viewList=viewList;
        //构造函数用于获取适配器资源
        //如在适配器内声明了资源,就不用写构造函数了
    }

    public int getCount() {
        return viewList.size();
    }

    public boolean isViewFromObject( View view, Object object ) {
        return view.equals(object);
    }

    public Object instantiateItem( ViewGroup container, int position ) {
        //向容器内添加指定页面;返回值也为该页面
        container.addView(viewList.get(position));
        return viewList.get(position);
    }

    public void destroyItem( ViewGroup container, int position, Object object ) {
        //从容器中移出指定页面
        container.removeViewInLayout(viewList.get(position));
    }
}

适配器必须重写4个方法: getCount()****、 isViewFromObject()****、 instantiateItem()****、 destroyItem()

4.翻页监听器 OnPageChangeListener

java 复制代码
class MyOnPageChangeListener implements ViewPager.OnPageChangeListener{

    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        //在翻页过程中触发
        //第一个参数表示当前页面序号;第二个参数表示当前页面偏移量,取值在0到1之间;第三个参数表示当前页面的偏移距离
    }

    public void onPageSelected(int position) {
        //在翻页结束后触发
        //参数表示当前页面序号
    }

    public void onPageScrollStateChanged(int state) {
        //在翻页状态改变时触发
        //参数为翻页状态:0为静止 1为正在滑动 2为滑动完毕
        //滑动状态依次为:正在滑动(1) -> 滑动完毕(2) -> 静止(0)
    }

}

5.翻页视图的使用及设置

java 复制代码
ViewPager viewPager=findViewById(R.id.~);

viewPager.setAdapter(new MyPagerAdapter( 参数 ));

viewPager.setCurrentItem(0);

//监听器可不加
viewPager.addOnPageChangeListener(new MyOnPageChangeListener());

6.翻页标题栏 PagerTitleStrip / PagerTabStrip

为了方便开发者处理ViewPager的页码显示与切换,Android附带了两个控件,分别是PagerTitleStripPagerTabStrip。两者都是在ViewPager页面上方展示设定的页面标题,不同之处在于PagerTitleStrip只是单纯的文本标题效果,无法点击进行页面切换;PagerTabStrip类似选项卡效果,文本下面有横线,点击左右选项卡即可切换到对应页面。

想在标题栏中显示指定文字,需重写PagerAdapter的getPageTitle()方法,在这方面两个控件的处理是一样的:

java 复制代码
class MyPagerAdapter extends PagerAdapter{

    ... ...
    
    //用于返回指定序号页面的标题
    public CharSequence getPageTitle(int position) {

        return ~ ;

    }

}

翻页标题栏在XML文件中的使用如下:

java 复制代码
<androidx.viewpager.widget.ViewPager
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.viewpager.widget.PagerTitleStrip
        android:id="@+id/pagerTitleStrip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/purple_200"/>
        
</androidx.viewpager.widget.ViewPager>

翻页标题栏因只有文本,所以样式只能调整文本大小及颜色;但因无XML属性,所以只能在代码中调用文本样式的设置方法。

java 复制代码
PagerTitleStrip pagerTitleStrip=findViewById(R.id.pagerTitleStrip);
pagerTitleStrip.setTextSize( TypedValue.COMPLEX_UNIT_SP , 20 );
pagerTitleStrip.setTextColor( R.color.white ); 
相关推荐
码哝小鱼11 分钟前
docker swarm常用命令
java·docker·eureka
不辉放弃12 分钟前
Kafka 和 Flink的讲解
java·c#·linq
莫魂魂38 分钟前
002_IDEA企业开发工具
java·ide·intellij-idea
〆、风神1 小时前
EasyExcel 数据字典转换器实战:注解驱动设计
android·java·注解
Thanwind1 小时前
关于JVM和OS中的指令重排以及JIT优化
java·jvm·jmm
点燃大海1 小时前
MySQL表结构导出(Excel)
java·数据库·python·mysql·spring
stevenzqzq1 小时前
Android studio xml布局预览中 Automotive和Autotive Distant Display的区别
android·xml·android studio
倒霉蛋小马2 小时前
【Java集合】LinkedList源码深度分析
java·开发语言
QING6182 小时前
Kotlin commonPrefixWith用法及代码示例
android·kotlin·源码阅读
风象南2 小时前
SpringBoot中6种API版本控制策略
java·spring boot·后端