Android开发----ViewPager

ViewPager

一个简单的页面切换组件

案例

编写3个页面进行切换

首先创建3个布局页面
添加背景色便于区分
layout1

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="#ff00ffff"
        xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
              android:textSize="30sp"
              android:text="layout1"
    />
</LinearLayout>

layout2

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="#ffff00ff"
        xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
              android:textSize="30sp"
              android:text="layout2"
    />
</LinearLayout>

layout3

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="#ffffff00"
        xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
              android:textSize="30sp"
              android:text="layout3"
    />
</LinearLayout>

总布局页acivity_main
添加id便于拿取

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <androidx.viewpager.widget.ViewPager android:layout_width="wrap_content" android:layout_height="wrap_content"
                android:id="@+id/vp"
            />
</LinearLayout>

创建Adapter继承PagerAdapter

PagerAdapter的方法

getCount()

获得viewpager中有多少个view

instantiateItem()

  1. 将给定位置的view添加到view group中,创建并显示处理
  2. 返回一个代表新增页面的Object(key),通常都是直接返回view本身就可以了,当然你也可以自定义自己的key,但是key和每个view要一一对应的关系

isViewFromObject()

判断instantiateItem(Viewgroup,int)函数所返回的key与一个页面视图是否是代表的同一个视图(即他俩是否是对应的,对应的表示同一个view),通常我们直接写成return view==object

destroyItem()

移除一个给定位置的页面,适配器有责任从容器中删除这个视图,这是为了确保在finish update(viewgroup)返回时视图能够被移除。
而另外两个方法则是涉及到一个key的

代码 MyAdapter

package com.example.myviewpager;

import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;

import java.util.List;

public class MyAdapter extends PagerAdapter {
    
    

    private List<View> listview;

    public MyAdapter(List<View> listview) {
    
    
        this.listview = listview;
    }

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

    @Override
    public int getCount() {
    
    
        return listview.size();
    }

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

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

MainActivity


import android.view.LayoutInflater;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.viewpager.widget.ViewPager;

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

public class MainActivity extends AppCompatActivity {

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

        LayoutInflater lf=getLayoutInflater().from(this);
        View view1=lf.inflate(R.layout.layout1,null);
        View view2=lf.inflate(R.layout.layout2,null);
        View view3=lf.inflate(R.layout.layout3,null);
        List<View> viewList=new ArrayList<>();
        viewList.add(view1);
        viewList.add(view2);
        viewList.add(view3);
        ViewPager viewPager=findViewById(R.id.vp);//获取viewpager
        MyAdapter myAdapter=new MyAdapter(viewList);
        viewPager.setAdapter(myAdapter);
    }
}


效果图

在这里插入图片描述
可进行翻页
ViewPager的练习就可以了,可以跟着练习!!!

猜你喜欢

转载自blog.csdn.net/m_xiaozhilei/article/details/122874887#comments_25736566
今日推荐