Android之ViewPager的简单使用[通俗易懂]

Android之ViewPager的简单使用[通俗易懂]AndroidViewPager的简单使用Android3.0后引入的一个UI控件——ViewPager(视图滑动切换工具)功能:通过手势滑动可以完成View的切换,一般是用来做APP的引导页或者实现图片轮播,因为是3.0后引入的,如果想在低版本下使用,就需要引入v4兼容包ViewPager就是一个简单的页面切换组件,我们可以往里面填充多个View,然后我们可以左右滑动,从而切换不同的View,我们可以通过setPageTransformer()方法为我们的ViewPager设置切换时

大家好,又见面了,我是你们的朋友全栈君。

Android ViewPager的简单使用

Android 3.0后引入的一个UI控件——ViewPager(视图滑动切换工具)

功能:通过手势滑动可以完成View的切换,一般是用来做APP 的引导页或者实现图片轮播,因为是3.0后引入的,如果想在低版本下使用,就需要引入v4 兼容包

ViewPager就是一个简单的页面切换组件,我们可以往里面填充多个View,然后我们可以左 右滑动,从而切换不同的View,我们可以通过setPageTransformer()方法为我们的ViewPager 设置切换时的动画效果。

和ListView,GridView一样,我们也需要一个Adapter (适配器)将我们的View和ViewPager进行绑定,而ViewPager则有一个特定的Adapter—— PagerAdapter

一、实例1.ViewPager简单的切换

通过滑动去切换View

运行效果:
在这里插入图片描述

  1. 编写activity_main.xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical">

   <androidx.viewpager.widget.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="600dp"/>

<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ViewPagre" android:layout_gravity="center"/>
</LinearLayout>
  1. 编写三个布局layout1.xml、layout2.xml、layout3.xml

三个布局都差不多,就只放一个布局了。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">

    <TextView android:background="#72C43C" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是第一个分页" android:textColor="#ff0000" android:textSize="30sp" android:layout_marginTop="200dp" android:layout_gravity="center"/>
</LinearLayout>
  1. 编写MainActivity活动类
package com.mq.viewpager;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity { 
   

    private ViewPager mViewPager;
    private List<View> mViews;  //存放视图的数组
    private View view1,view2,view3;
    private PagerAdapter mPagerAdapter;//适配器
    @Override
    protected void onCreate(Bundle savedInstanceState) { 
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mViewPager=findViewById(R.id.viewpager);// 实例化viewpager控件

        LayoutInflater inflater = getLayoutInflater();//获取布局对象管理
        view1=inflater.inflate(R.layout.layout1,null);//实例化view
        view2=inflater.inflate(R.layout.layout2,null);
        view3=inflater.inflate(R.layout.layout3,null);

        mViews=new ArrayList<View>();//将要显示的布局存放到list数组
        mViews.add(view1);
        mViews.add(view2);
        mViews.add(view3);

        //实例化一个PagerAdapter的适配器
        mPagerAdapter=new PagerAdapter() { 
   
            @Override   //返回要滑动的VIew的个数
            public int getCount() { 
   
                return mViews.size();
            }

            @Override  //来判断pager的一个view是否和instantiateItem方法返回的object有关联
            public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { 
   
                return view==object;
            }

            @Override  //从当前container中删除指定位置(position)的View;
            public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { 
   
                container.removeView(mViews.get(position));
            }

            @NonNull
            @Override  //第一:将当前视图添加到container中,第二:返回当前View
            public Object instantiateItem(@NonNull ViewGroup container, int position) { 
   
                container.addView(mViews.get(position));
                return mViews.get(position);
            }
        };

        mViewPager.setAdapter(mPagerAdapter);//设置适配器
    }


}

注意:

使用PagerAdapter必须重写的四个方法:

getCount(): 获得viewpager中有多少个view

destroyItem(): 移除一个给定位置的页面。适配器有责任从容器中删除这个视图。 这是为了确保在finishUpdate(viewGroup)返回时视图能够被移除。

instantiateItem(): ①将给定位置的view添加到ViewGroup(容器)中,创建并显示出来 ②返回一个代表新增页面的Object(key),通常都是直接返回view本身就可以了,当然你也可以 自定义自己的key,但是key和每个view要一一对应的关系

isViewFromObject(): 判断instantiateItem(ViewGroup, int position)函数所返回来的Key与一个页面视图是否是 代表的同一个视图(即它俩是否是对应的,对应的表示同一个View),通常我们直接写 return view == object!

二、实例2.标题栏——PagerTitleStrip与PagerTabStrip

跟随着ViewPager滑动而滑动的标题咯,这两个是官方提供的,一个是普通文字, 一个是带有下划线,以及可以点击文字可切换页面

PagerTitleStrip 运行效果:
在这里插入图片描述

  1. 三个view的布局文件还是和实例1中的一样
  2. 修改activity_main.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical">

   <TextView android:layout_width="match_parent" android:layout_height="48dp" android:background="#CCFF99" android:gravity="center" android:text="PagerTitleStrip效果演示" android:textColor="#000000" android:textSize="18sp" />

   <androidx.viewpager.widget.ViewPager android:id="@+id/viewpager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center">

      <androidx.viewpager.widget.PagerTitleStrip android:id="@+id/pagertitle" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_gravity="top" android:textColor="#000000" />
   </androidx.viewpager.widget.ViewPager>


</LinearLayout>
  1. 自定义一个MyPagerAdapter适配器
package com.mq.viewpager;

import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewpager.widget.PagerAdapter;

import java.util.ArrayList;

public class MyPagerAdapter extends PagerAdapter { 
   


    private ArrayList<View> mViewlist;
    private ArrayList<String> mtitlelist;

    public MyPagerAdapter() { 
   
    }

    public MyPagerAdapter(ArrayList<View> viewlist, ArrayList<String> mtitlelist) { 
   
        mViewlist = viewlist;
        this.mtitlelist = mtitlelist;
    }

    @Override
    public int getCount() { 
   
        return mViewlist.size();//返回view数组大小
    }


    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { 
   
        return view==object;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) { 
   
        container.addView(mViewlist.get(position));
        return mViewlist.get(position);
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { 
   
        container.removeView(mViewlist.get(position));
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) { 
   
        return mtitlelist.get(position);
    }
}

  1. 编写MainActivity代码
package com.mq.viewpager;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity { 
   

    private ViewPager mViewPager;
    private ArrayList<View> mViews;  //存放视图的数组
    private View view1,view2,view3;
    private MyPagerAdapter mAdapter;//适配器
    private ArrayList<String> mtitle;//存放标题的数组

    @Override
    protected void onCreate(Bundle savedInstanceState) { 
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mViewPager = findViewById(R.id.viewpager);// 实例化viewpager控件

        LayoutInflater inflater = getLayoutInflater();//获取布局对象管理
        view1 = inflater.inflate(R.layout.layout1, null);//实例化view
        view2 = inflater.inflate(R.layout.layout2, null);
        view3 = inflater.inflate(R.layout.layout3, null);

        mViews = new ArrayList<View>();//将要显示的布局存放到list数组
        mViews.add(view1);
        mViews.add(view2);
        mViews.add(view3);

        mtitle = new ArrayList<String>();//存放标题的数组
        mtitle.add("推荐");
        mtitle.add("热门");
        mtitle.add("直播");

        mAdapter=new MyPagerAdapter(mViews,mtitle);//实例化适配器
        mViewPager.setAdapter(mAdapter);//设置适配器
    }
}

PagerTabStrip :就是比PagerTitleStrip多一个下划线
运行效果:

在这里插入图片描述

只要修改activity_main.xml的PagerTitleStrip为PagerTabStrip即可

在这里插入图片描述

这些简单的使用样式都太丑,在我们的开发中往往都会和其他控件一起使用。

今天的分享就到这了!ε=ε=ε=ε=ε=ε=┌(; ̄◇ ̄)┘

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163234.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【spring】注解方式的bean管理

    【spring】注解方式的bean管理【spring】注解方式的bean管理

    2022年4月25日
    35
  • Java集合容器面试题(2020最新版)「建议收藏」

    Java集合容器面试题(2020最新版)「建议收藏」文章目录集合容器概述什么是集合集合的特点集合和数组的区别使用集合框架的好处常用的集合类有哪些?List,Set,Map三者的区别?List、Set、Map是否继承自Collection接口?List、Map、Set三个接口存取元素时,各有什么特点?集合框架底层数据结构哪些集合类是线程安全的?Java集合的快速失败机制“fail-fast”?怎么确保一个集合不能被修改?Collection…

    2022年6月14日
    26
  • Windows程序设计——LoadImage参数及其用法「建议收藏」

    Windows程序设计——LoadImage参数及其用法「建议收藏」LoadImage是一种函数,功能是装载图标,光标,或位图。简介编辑函数功能:该函数装载图标,光标,或位图。函数原型:HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int cyDesired,UINT fuLoad);参数hinst:处理包含被装载图像模块的实例。若要…

    2022年8月18日
    14
  • minicom指令_如何优雅地使用minicom

    minicom指令_如何优雅地使用minicomminicom简介安装minicom是linux下一款常用的串口调试工具。ubuntu环境下,使用如下命令安装sudoapt-getinstallminicom配置使用前需要进行配置,执行sudominicom-s可打开minicom并进入配置模式,使用方向键,选择需要配置的项目,如Serialportsetup,回车进入配置,可以看到多个配置项,此时光标在最下方。需要修改某个配…

    2022年6月8日
    48
  • CE教程步骤8操作指南

    CE教程步骤8操作指南CE 教程步骤 8 操作指南 CE 全称 CheatEngine 是一款专注于游戏的修改器 教程的步骤 8 特别难 这是一个四级指针 比较绕 下面分步解析 其他详细说明请参考别人的博客第一个指针 1 精确数值搜索多次搜索后得到唯一一条数据结论 001A1268 gt VALUE 地址 001A1268 存放数值 2 找出改写这个地址的指针结论 rsi 18 gt 001A1268 rsi 001A1250 指针数值 001A1250 偏移 18 一起改写地址 001A12683 以

    2025年10月18日
    3
  • iphone android换机助手下载,腾讯换机助手手机最新版 目前最好用的安卓/苹果一键换机工具…

    iphone android换机助手下载,腾讯换机助手手机最新版 目前最好用的安卓/苹果一键换机工具…换机助手软件介绍换机助手是腾讯开发的一款跨平台手机资料迁移工具,它可以在安卓与安卓,苹果与苹果,安卓与苹果手机之间进行数据迁移,安卓手机可以直接在下面下载APP,而苹果手机则需要在自带的APPSTORE中搜索“换机助手”下载安装,这也是非常实用的一款程序了!换机助手软件功能:该软件可以通过调用手机创建热点,进行两部手机匹配互联,零消耗网络流量传输手机资料。目前已支持安卓Android与苹果iOS…

    2022年5月26日
    74

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号