ViewPager+PagerAdapter,使用ViewPager布局,加载继承自view的控件对象,需要实现 PagerAdapter适配器。
一、ViewPagerActivity
/**
* ViewPager+PagerAdapter
*/
public class ViewPagerActivity extends AppCompatActivity {
private ViewPager mViewPager;
private List<ImageView> imageViews;
private int[] colos={Color.RED,Color.BLUE,Color.GREEN};
private MyPagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager);
initView();
}
private void initView() {
getViews();
mViewPager= (ViewPager) findViewById(R.id.vp_container);
adapter=new MyPagerAdapter(this,imageViews);
mViewPager.setOffscreenPageLimit(3);//管理最大页面
mViewPager.setAdapter(adapter);
}
/**
* 构造数据
*/
private void getViews() {
imageViews=new ArrayList<>();
ImageView imageView;
ViewGroup.LayoutParams params=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
for(int i=0;i<3;i++){
imageView=new ImageView(this);
imageView.setLayoutParams(params);
imageView.setBackgroundColor(colos[i]);
imageViews.add(imageView);
}
}
}
二、MyPagerAdapter
/**
* PagerAdapter用于在ViewPager中加载view的时候使用
* 四个方法和一个构造方法
* getPageTitle可选
* Created by Devin Chen on 2016/12/17.
*/
public class MyPagerAdapter extends PagerAdapter {
private Context context;
private List<ImageView> imageViews;
public MyPagerAdapter(Context context, List<ImageView> imageViews) {
this.context = context;
this.imageViews = imageViews;
}
@Override
public int getCount() {
return imageViews.size();
}
/**
* 从数据集合中取出view,加入到容器当中
* @param container
* @param position
* @return
*/
@Override
public ImageView instantiateItem(ViewGroup container, int position) {
ImageView view=imageViews.get(position);
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
container.removeView((View) object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
/**
* 与TabLayout结合的时候可以用来获取title
* @param position
* @return
*/
@Override
public CharSequence getPageTitle(int position) {
return super.getPageTitle(position);
}
}