翻页视图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附带了两个控件,分别是PagerTitleStrip和PagerTabStrip。两者都是在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 ); 
相关推荐
蛋蛋的就会顺顺的4 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
朱涛的自习室4 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
需要8265 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡5 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
伯恩bourne7 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_7 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
省钱兄--zs8 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲8 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog8 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
用户21296835261688 小时前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm