1 ViewPager简介
ViewPager
这个类可以让用户切换当前的View
。ViewPager
是 v4 包中的一个类。ViewPager
类直接继承了ViewGroup
类,所以它是一个容器类,可以在其中添加其他View类。ViewPager
类需要一个PagerAdapter
适配器类给它提供数据ViewPager
经常和Fragment
一起使用,并且提供了专门的FragmentPagerAdapter
和FragmentStatePagerAdapter
类供Fragment
中的ViewPager
使用。
2 ViewPager的应用场景
- 引导界面、相册多图片预览
- 多Tab页面、APP导航
- 广告播放展示
3 ViewPager的使用
- 编写activity_main.xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.viewpager.widget.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.viewpager.widget.ViewPager>
</LinearLayout>
- 编写三个布局view1.xml、view2.xml、view3.xml(三个布局类似)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="view1"
android:textSize="40sp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
- 编写MainActivity活动类
public class MainActivity extends AppCompatActivity {
private static final String TAG = "LCG_MainActivity";
private ViewPager viewPager;
private int[] mLayoutIds = {
R.layout.view1,
R.layout.view2,
R.layout.view3};
private List<View> views;//存放view的集合
PagerAdapter mPagerAdapter;//适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.view_pager);//实例化ViewPager
//将要显示的布局存放到list集合
views = new ArrayList<View>();
for (int i = 0; i < mLayoutIds.length; i++) {
View view = getLayoutInflater().inflate(mLayoutIds[i], null);
views.add(view);
}
//实例化一个PagerAdapter的适配器
mPagerAdapter = new PagerAdapter() {
/**
* 返回要滑动的VIew的个数
* @return
*/
@Override
public int getCount() {
return views.size();
}
/**
* 判断pager的一个view是否和instantiateItem方法返回的object有关联
* @param view
* @param object
* @return
*/
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
/**
* 第一:将当前视图添加到container中
* 第二:返回当前View
* @param container
* @param position
* @return
*/
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
View childView = views.get(position);
container.addView(childView);
return childView;
}
/**
* 从当前container中删除指定位置(position)的View
* @param container
* @param position
* @param object
*/
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
View childView = views.get(position);
container.removeView(childView);
}
};
//设置适配器
viewPager.setAdapter(mPagerAdapter);
}
}
4 另一种写法
MyPagerAdapter.class
public class MyPagerAdapter extends PagerAdapter {
private List<View> mViews;
private Context mContext;
public MyPagerAdapter(List<View> mViews, Context mContext) {
this.mViews = mViews;
this.mContext = mContext;
}
public MyPagerAdapter(List<View> mViews) {
this.mViews = mViews;
}
@Override
public int getCount() {
return mViews.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
View view = mViews.get(position);
container.addView(view);
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(mViews.get(position));
}
}
MainActivity.class
private void initView(){
//初始化数据,将要显示的布局存放到list集合
views = new ArrayList<View>();
for (int i = 0; i < mLayoutIds.length; i++) {
ImageView view = new ImageView(this);
view.setImageResource(R.mipmap.ic_launcher);
//View view = getLayoutInflater().inflate(mLayoutIds[i], null);
views.add(view);
}
viewPager = findViewById(R.id.view_pager);//实例化ViewPager
mPagerAdapter = new MyPagerAdapter(views, this);
//设置适配器
viewPager.setAdapter(mPagerAdapter);
}
代码: