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()
- 将给定位置的view添加到view group中,创建并显示处理
- 返回一个代表新增页面的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的练习就可以了,可以跟着练习!!!