二十二、ViewPager

一、PagerAdapter 的方法

getCount()

  获得viewpager中有多少个view

instantiateltem()

  1.将给定位置的jiew添加到ViewGroup(容器)中,创建并显示出来

  2.返回一个代表新增页面的Object(key),通常都是直接返回view本身就可以了,当然你也可以自定义自己的key,但是key和每个view要一 一对应的关系

isViewFromObject()

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

destroyltem()

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

二、代码示例

1.ui界面布局

<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/viewpager1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

  创建下图代码所示,创建三个xml页面,分别时 layout1  layout2   layout3;更改文字和文字颜色,显示不同的效果展示

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

    <TextView
        android:layout_centerInParent="true"
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="布局1"
        android:textColor="#F40202"
        android:textSize="60sp" />

</LinearLayout>

1.后台代码

package com.example.myapplication;

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> mListView;

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

    /**
     * 获取ViewPager中有多少个view
     * */
    @Override
    public int getCount() {
        return mListView.size();
    }

    /**
     * 判断是否相等
     * */
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    /**
     * 将给定位位置view加到ViewGroup容器中,创建并显示
     * */
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        container.addView(mListView.get(position),0);
        return mListView.get(position);
    }

    /**
     * 销毁view
     * */
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView(mListView.get(position));
    }
}

  

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

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

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 from=getLayoutInflater().from(this);
        View view1 = from.inflate(R.layout.layout1,null);
        View view2 = from.inflate(R.layout.layout2,null);
        View view3 = from.inflate(R.layout.layout3,null);

        //添加数据集合
        List<View> listView = new ArrayList<>();
        listView.add(view1);
        listView.add(view2);
        listView.add(view3);

        ViewPager viewPager = findViewById(R.id.viewpager1);
        MyAdapter myAdapter = new MyAdapter(listView);
        viewPager.setAdapter(myAdapter);

    }
}

三、效果图

滑动屏幕实现左右切换

 

posted @ 2022-03-25 09:32  搬砖工具人  阅读(47)  评论(0编辑  收藏  举报