切换类组件ViewPager

介绍

        ViewPager 是由 Android v4 包提供的一个组件,它是 ViewGroup 的子类,所以它也是一个容器类,可以在其中添加其他的 view 类。ViewPager 需要一个 PagerAdapter 适配器给它提供数据,它使用的监听器是 OnPageChangeListener,用于监听页面切换的事件。在 Android 中,该组件经常被使用在左右滑动时显示多个页面的运行效果。网易云一开始使用时的引导界面

        安卓SDK升级后,V4包会找不到报错,更新后android.support.v4.view.ViewPager被androidx.viewpager.widget.ViewPager所取代,所有关于v4的包都要替换掉。具体如何修改:修改XML文件中的android.support.v4.view.ViewPager为androidx.viewpager2.widget.ViewPager2或者androidx.viewpager.widget.ViewPager。并在依赖库中添加下面的包:

implementation 'androidx.viewpager:viewpager:1.0.0'

 或者

implementation "androidx.viewpager2:viewpager2:1.0.0"

 基本语法:

  • 添加方向指定从右到左  android:layoutDirection="rtl"
  • 添加方向指定垂直滑动 android:orientation="vertical"
<!--ViewPager组件-->
<androidx.viewpager2.widget.ViewPager2
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layoutDirection="rtl"/>

相关方法

(1)PagerAdapter:ViewPager 的适配器。创建该对象时需要重写它的 4 个方法。具体方法如下:

  • instantiateItem(): 将当前视图添加到视图容器中并返回当前所显示的视图。
  • destroyItem():从视图容器中移除指定位置的页面。
  • getCount():可用滑动页面的数量。
  • isViewFromObject(): 确定页面视图是否与返回的对象相关联 , 返回 view == object 即可。

(2)ViewPager.OnPageChangeListener:页面切换时的监听事件,其中需要实现的 3 个方法如下:

  • onPageScrollStateChanged(): 在翻译状态发生改变时被调用。
  • onPageScrolled():在翻页过程中该方法被调用。
  • onPageSelected(): 当页面被选中时该方法被调用。

例子

模拟APP引导界面

编写布局文件

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

    <!--ViewPager组件-->
    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layoutDirection="rtl"/>

</RelativeLayout>

创建layout1、layout2、layout3,主要改变背景就行

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

layout4中多添加一个按钮

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

    <!--启动主界面的按钮-->
    <Button
        android:id="@+id/btn"
        android:layout_width="170dp"
        android:layout_height="50dp"
        android:text="Hi"
        android:textColor="	#000000"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="360dp"
        android:background="@color/teal_700"
        android:onClick="onEnter"
        android:textSize="20sp"
        android:textAllCaps="false"/>
</LinearLayout>

编写ViewPagerActivity

public class ViewPagerActivity extends AppCompatActivity {

    private View view1, view2, view3, view4; //4个页面视图
    private List<View> viewList; //保存页面的数组列表
    private ViewPager viewPager; //ViewPager组件

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_pager);
        //隐藏标题栏
        ActionBar actionBar = getSupportActionBar();
        actionBar.hide();
        init();
        viewPager.setAdapter(adapter); //设置适配器
    }
    
    //相关初始化
    private void init(){
        LayoutInflater lf = getLayoutInflater().from(this); //获取布局填充器
        viewPager = (ViewPager) findViewById(R.id.viewPager); //获取ViewPager组件
        view1 = lf.inflate(R.layout.layout1, null); //加载页面1的布局文件
        view2 = lf.inflate(R.layout.layout2, null); //加载页面2的布局文件
        view3 = lf.inflate(R.layout.layout3, null); //加载页面3的布局文件
        view4 = lf.inflate(R.layout.layout4, null); //加载页面4的布局文件
        viewList = new ArrayList<View>(); //创建保存4个页面的数组列表
        viewList.add(view1); //向数组列表中添加第1个页面
        viewList.add(view2); //向数组列表中添加第2个页面
        viewList.add(view3); //向数组列表中添加第3个页面
        viewList.add(view4); //向数组列表中添加第4个页面
    }

    //创建 PagerAdapter 对象并重写所需要的 4 个方法来实现所有页面的切换功能
    PagerAdapter adapter = new PagerAdapter() { //创建适配器
        @Override
        public int getCount() { //获取页面个数
            return viewList.size(); //返回页面数量
        }

        //确定页面视图是否与返回的对象相关联
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        //从视图容器中移除指定位置的页面
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(viewList.get(position));
        }
        //返回当前所显示的视图
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            container.addView(viewList.get(position));
            return viewList.get(position);
        }
    };

    public void onEnter(View view){ //第4个页面中按钮单击事件方法
        //创建Intent跳转主界面中
        Intent intent=new Intent(this,AmongFlipper.class);
        startActivity(intent); //启动Intent
    }

}

效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值