1.ViewPager的特点:
ViewPager直接继承与ViewGroup,是一个容器类控件,可以在其中添加其他的view。
ViewPager需要通过PageAdapter适配器类给他提供数据。
ViewPager经常和Fragment连用,有FragmentPageAdapter 和FragmentSatePageAdapter类,来提供Fragemtn给ViewPager
2 回顾适配器:
介绍的BaseAdapter 和CursorAdapter 类及其子类的应用
BaseAdapter :基本适配器的抽象类型,常用的子类包括ArrayAdapter 和SimpleAdapter。
如果需要存储复杂数据时,直接继承与BaseAdapter。重写四个方法:
getCount : 返回数据源的大小,包含多少个列表项
getItem : 返回指定位置上的数据
getItemId : 返回指定位置上item控件对应的id
getview : 返回指定位置上上的控件
CursorAdapter : 继承于BaseAdapter,他为cursor和ListView提供了连接的桥梁
重写2个方法 new view() 生成item对应的视图 bindView() 初始化视图对应的控件
3 PageAdapter
需要重写的方法
instantiateItem(ViewGroup,int) 根据指定的下标创建viewpager当中的pager页
destroyItem(viewgroup,int,Object)根据指定的下标移除viewPager中的page页
getcount:当前适配器加载的数据的条目
isViewFromObject(View,object):判断viewpage中加载的view和 instantiateItem实例化的view是不是一致的。
4.ViewPager监听页面改变的监听器 OnPageChangeListener
vp.setOnPageChangeListener(new OnPageChangeListener() {
/**
* 页面被选中时回调的方法
* position :表示页面的位置
* */
@Override
public void onPageSelected(int position) {
for (int i = 0; i < icons.length; i++) {
icons[i].setImageResource(R.drawable.icon02);
}
icons[position].setImageResource(R.drawable.icon01);
}
/**页面滚动时回调的方法
* position:当前页面向下滑动的角标
* positionOffset:当前页面滑动的偏移量
* positionOffsetPixels:当前页面滑动的偏移量对应的像素值
* */
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
/**当页面滚动状态改变时回调的方法
* 参数包含三种状态:
* SCROLL_STATE_IDLE :停止状态
SCROLL_STATE_DRAGGING:滚动状态
SCROLL_STATE_SETTLING:选中状态
* */
@Override
public void onPageScrollStateChanged(int position) {
}
});
}
5.PagerTitleStrip的特点
1.在布局中,把PagerTitleStrip作为viewpager的子控件进行添加。
2.标题的获取,通过重写适配器的getPageTitle方法,来设置标题。
6.PagerTitleStrip和PagerTabStrip的区别:
1.PagerTabStrip的底部有一条下划线,选中项的下划线可以改变颜色并且是加粗的。
2.PagerTabStrip是可以被点击的,跳转到对应的页面,能够与viewpager进行交互。而PagerTitleStrip是不能够被点击的。
tabStrip.setDrawFullUnderline(false); //设置是否取消下划线
tabStrip.setBackgroundColor(Color.RED); //设置背景颜色
tabStrip.setTabIndicatorColor(Color.GREEN); //设置选中项的下划线颜色
pageAdapter 处理前后滑动出错的解决办法
public class MyPageadapter extends PagerAdapter {
private Context context;
private List<ImageView> list;
// private List<View> list;
public MyPageadapter(Context context, List<ImageView> list) {
// public MyPageadapter(Context context, List<View> list) {
super();
this.context = context;
this.list = list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View v = list.get(position % list.size());
ViewGroup parent = (ViewGroup) v.getParent();
if (parent != null) {
parent.removeView(v);
}
container.addView(v);
return v;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
}
}