先看效果图:
一、ViewPager是什么?(知道怎么回事即可)
谷歌官方解释大致意思如下:
1.布局管理器允许左右翻转带数据的页面,你想要显示的视图可以通过实现PagerAdapter来显示。
2.ViewPager经常用来连接Fragment,它很方便管理每个页面的生命周期,使用ViewPager管理Fragment是标准的适配器实现。
最常用的实现一般有FragmentPagerAdapter和FragmentStatePagerAdapter。
3.FragmentPagerAdapter和FragmentStatePagerAdapter是ViewPager和Fragment一起使用时才会用到。
二、ViewPager用途是什么?(知道是用来干嘛的就行)
1.最常用的就是广告轮播效果都是用ViewPager实现的。
2.APP的引导页面也是用ViewPager来实现。
三、ViewPager的基本使用(重点)
首先使用ViewPager之前你必须必备的知识:适配器的使用
步骤如下:
1.在布局文件中添加如下代码:
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
2.设置适配器
继承PagerAdapter
必须重写四个方法
getCount():获得viewpager中有多少个view
destroyItem():移除一个给定位置的页面。适配器有责任从容器中删除这个视图。 这是为了确保在finishUpdate(viewGroup)返回时视图能够被移除。
instantiateItem(): ①将给定位置的view添加到ViewGroup(容器)中,创建并显示出来 ②返回一个代表新增页面的Object(key),通常都是直接返回view本身就可以了,当然你也可以 自定义自己的key,但是key和每个view要一一对应的关系
isViewFromObject(): 判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是 代表的同一个视图(即它俩是否是对应的,对应的表示同一个View),通常我们直接写 return view == object
适配器代码:
public class MyviewpagerAdapter extends PagerAdapter {
private Context context; //上下文这里代表前面传过来的MainActivity
private List<ImageView> listview;//数据源,要显示的图片
private ViewPager viewPager;
/*
* 构造函数:初始化传过来的上下文,ViewPager和数据源
*Context:上下文
*/
public MyviewpagerAdapter(Context context, ViewPager viewPager, List<ImageView> listview){
this.context=context;
this.listview=listview;
this.viewPager=viewPager;
}
@Override
public int getCount() {
return listview.size();
}//获得viewPager要显示多少个视图
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view==o;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(listview.get(position));//移除一个给定位置的页面
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(listview.get(position));//给定位置添加显示一个view
return listview.get(position);//返回View本身
}
}
3.Viewpager设置适配器(MainActivity中的代码)
public class MainActivity extends AppCompatActivity {
private long dowmtime;
private boolean isloop=true;
private int dowmx;
List<View> listview;
private ViewPager viewPager;
List<String> list ;
private List<ImageView> mlist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 去掉标题栏(必须要在setContentView(R.layout.activity_main)之前声明)
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
viewPager=findViewById(R.id.viewpager);
// 数据源
mlist = new ArrayList<>();
// 这里是我们自定义的图片,一般都是从网上解析的图片
int[] imageRes = getImageRes();
for (int i = 0; i < imageRes.length; i++) {
ImageView iv = new ImageView(this);
//设置背景
iv.setBackgroundResource(imageRes[i]);
mlist.add(iv);
}
MyviewpagerAdapter myviewpagerAdapter=ne MyviewpagerAdapter(MainActivity.this,viewPager, mlist)
viewPager.setAdapter(myviewpagerAdapter);
// tb_laoyut.setTabMode(TabLayout.MODE_FIXED);//设置tab模式,当前为系统默认模式
//tb_laoyut.setupWithViewPager(viewPager); //将TabLayout和ViewPager关联起来。
viewPager.setCurrentItem(1);
//返回图片数组,这个图片是放在drawable下
private int[] getImageRes() {
return new int[] { R.drawable.c,R.drawable.a, R.drawable.b, R.drawable.c,R.drawable.a
};
}
}
四、ViewPager+Tablayout的使用(重点,后续)
五、Viewpager+Tablayout+Fragment的使用(重点,后续)
通过上面三个步骤已经实现了Viewpager切换效果。需要源码和教程可直接扫码关注公众号。有任何问题可回复“1”可添加小编微信哦!