安卓 ViewPager的介绍和使用
ViewPager的介绍
Viewpager 视图翻页工具,提供了多页面切换的效果
Viewpager 使用起来就是我们通过创建adapter给它填充多个view,左右滑动时,切换不同的view
ViewPager 直接继承了 ViewGroup,所有它是一个容器类,可以在其中添加其他的 view 类
ViewPager 需要一个 PagerAdapter 适配器类给它提供数据
ViewPager的基本使用
activity的xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</android.support.v4.view.ViewPager>
</LinearLayout>
在layout文件文件夹中,创建一个viewPager的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是提示文字"
/>
</LinearLayout>
创建适配器继承PagerAdapter
public class MyViewPagerAdapter extends PagerAdapter {
private Context context;
private List<String> mdate;
//构造
public MyViewPagerAdapter(Context context, List<String> mdate) {
this.context = context;
this.mdate = mdate;
}
//一共有几个页面
@Override
public int getCount() {
return mdate.size();
}
//判断一个页面(View)是否与instantiateItem方法返回的Object一致
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view == o;
}
//创建一个页面
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
//加载创建的vp布局
View inflate = View.inflate(context, R.layout.vp, null);
//给布局中的控件赋值
TextView textView = inflate.findViewById(R.id.tv);
textView.setText(mdate.get(position));
//添加布局
container.addView(inflate);
return inflate;
}
//销毁一个页面
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
activity的java文件
public class MainActivity extends AppCompatActivity {
private ViewPager vp;
private Timer timer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp = (ViewPager) findViewById(R.id.vp);
//初始化数据
final List<String> list = new ArrayList<>();
for (int i = 1; i < 4; i++) {
list.add("这是第"+i+"个界面");
}
//设置适配器adapter
vp.setAdapter(new MyViewPagerAdapter(this,list));
}
}
自动翻页
//自动翻页
CountDownTimer timer = new CountDownTimer(100000,1000) {
int n = 0;
@Override
public void onTick(long millisUntilFinished) {
vp.setCurrentItem(n);
n++;
if (n == list.size()){
n = 0;
}
}
@Override
public void onFinish() {
}
};
//启动
timer.start();
}
ViewPager与Fragment结合使用
适配器
public class Myadapter extends FragmentStatePagerAdapter {
private List<Fragment> list;
public Myadapter(FragmentManager fm, List<Fragment> list) {
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int i) {
return list.get(i);
}
@Override
public int getCount() {
return list.size();
}
}
把创建的fragment添加到list集合中
public class MainActivity extends AppCompatActivity {
private ViewPager vp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp = (ViewPager) findViewById(R.id.vp);
List<Fragment> list = new ArrayList<>();
list.add(new Fragment1());
list.add(new Fragment2());
list.add(new Fragment3());
Myadapter myadapter = new Myadapter(getSupportFragmentManager(), list);
vp.setAdapter(myadapter);
}
}