Android学习|视图翻页——ViewPager

Android学习|视图翻页——ViewPager

    • 简单效果
    • 实现
      • 1、activity_main.xml中添加ViewPager
      • 2、做多个xml作为要添加的View
      • 3、获取自定义的几个xml的View
      • 4、获取ViewPager,并进行Adapter配置
        • 4.1进行Adapter配置
          • 4.1.1 PagerAdapter方法
      • 主MainActivity.类代码如下

简单效果

Android学习|视图翻页——ViewPager_第1张图片

实现

1、activity_main.xml中添加ViewPager

当ViewPager中没有视图时,为空白的


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


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

    androidx.viewpager.widget.ViewPager>


LinearLayout>

2、做多个xml作为要添加的View

其他view自行修改


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


<TextView
    android:text="Layout 1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:textSize="50dp"
    android:background="#99D2C5">
TextView>

LinearLayout>

3、获取自定义的几个xml的View

保存在一个集合里

  LayoutInflater from = getLayoutInflater().from(this);
        View view1 = from.inflate(R.layout.layout_1, null);
        View view2 = from.inflate(R.layout.layout_2, null);
        View view3 = from.inflate(R.layout.layout_3, null);

        List<View> list = new ArrayList<>();
        list.add(view1);
        list.add(view2);
        list.add(view3);

4、获取ViewPager,并进行Adapter配置

获取ViewPager

ViewPager viewPager = findViewById(R.id.vp);
MyAdapter myAdapter = new MyAdapter(list); //MyAdapter为自定义的adapter配置类
viewPager.setAdapter(myAdapter);

MyAdapter为自定义的adapter配置类,具体配置如下(进行Adapter配置)


4.1进行Adapter配置

ViewPager的Adapter类是继承自PagerAdapter.

4.1.1 PagerAdapter方法

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

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

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

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

下面为配置MyAdapter类的代码

package com.example.fourthdemo_2_viewpager;

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

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

    //View 添加到 ViewPager容器中
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        container.addView(viewList.get(position));
        return viewList.get(position);
    }

    //从ViewPager 中 删除一个View
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView(viewList.get(position));
    }

    //判断instantiateItem返回的视图的key与一个视图代表的是否相对应
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }


    //获得Viewpager中view数量
    @Override
    public int getCount() {
        return viewList.size();
    }


}




主MainActivity.类代码如下

package com.example.fourthdemo_2_viewpager;

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

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

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.layout_1, null);
        View view2 = from.inflate(R.layout.layout_2, null);
        View view3 = from.inflate(R.layout.layout_3, null);

        List<View> list = new ArrayList<>();
        list.add(view1);
        list.add(view2);
        list.add(view3);


        ViewPager viewPager = findViewById(R.id.vp);
        MyAdapter myAdapter = new MyAdapter(list);
        viewPager.setAdapter(myAdapter);


    }
}

你可能感兴趣的:(Android,android,学习,java)