1.ViewPager的特点:
1.ViewPager直接继承与ViewGroup,是一个容器类控件,可以在其中添加其他的view。
2.ViewPager需要通过PagerAdapter适配器类给他提供数据。
3.ViewPager经常和Fragment一起使用,有FragmentPagerAdapter和FragmentStatePagerAdapter类,来提供Fragment给ViewPager。
2.PagerAdapter
需要重写的方法:
instantiateItem(ViewGroup, int) :根据指定的下标创建viewpager当中的pager页
destroyItem(ViewGroup, int, Object):根据指定的下标移除viewpager中的pager页
getCount() :当前适配器加载的数据的条目
isViewFromObject(View, Object):判断viewpager中加载的view和instantiateItem实例化的view是不是一致的。
3.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) {
}
});
}
4.PagerTitleStrip的特点
1.在布局中,把PagerTitleStrip作为viewpager的子控件进行添加。
2.标题的获取,通过重写适配器的getPageTitle方法,来设置标题。
5.PagerTitleStrip和PagerTabStrip的区别:
1.PagerTabStrip的底部有一条下划线,选中项的下划线可以改变颜色并且是加粗的。
2.PagerTabStrip是可以被点击的,跳转到对应的页面,能够与viewpager进行交互。而PagerTitleStrip是不能够被点击的。
tabStrip.setDrawFullUnderline(false); //设置是否取消下划线
tabStrip.setBackgroundColor(Color.RED); //设置背景颜色
1.ViewPager直接继承与ViewGroup,是一个容器类控件,可以在其中添加其他的view。
2.ViewPager需要通过PagerAdapter适配器类给他提供数据。
3.ViewPager经常和Fragment一起使用,有FragmentPagerAdapter和FragmentStatePagerAdapter类,来提供Fragment给ViewPager。
2.PagerAdapter
需要重写的方法:
instantiateItem(ViewGroup, int) :根据指定的下标创建viewpager当中的pager页
destroyItem(ViewGroup, int, Object):根据指定的下标移除viewpager中的pager页
getCount() :当前适配器加载的数据的条目
isViewFromObject(View, Object):判断viewpager中加载的view和instantiateItem实例化的view是不是一致的。
3.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) {
}
});
}
4.PagerTitleStrip的特点
1.在布局中,把PagerTitleStrip作为viewpager的子控件进行添加。
2.标题的获取,通过重写适配器的getPageTitle方法,来设置标题。
5.PagerTitleStrip和PagerTabStrip的区别:
1.PagerTabStrip的底部有一条下划线,选中项的下划线可以改变颜色并且是加粗的。
2.PagerTabStrip是可以被点击的,跳转到对应的页面,能够与viewpager进行交互。而PagerTitleStrip是不能够被点击的。
tabStrip.setDrawFullUnderline(false); //设置是否取消下划线
tabStrip.setBackgroundColor(Color.RED); //设置背景颜色
tabStrip.setTabIndicatorColor(Color.GREEN); //设置选中项的下划线颜色
实例一: PagerTabStrip的使用
public class MainActivity extends Activity {
private ViewPager vp;
private PagerTabStrip titleStrip;
private List<View>list;
private List<String>titles;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp = (ViewPager)findViewById(R.id.vp);
titleStrip = (PagerTabStrip)findViewById(R.id.titlestrip);
list = new ArrayList<View>();
list.add(getLayoutInflater().inflate(R.layout.pager1, null));
list.add(getLayoutInflater().inflate(R.layout.pager2, null));
list.add(getLayoutInflater().inflate(R.layout.pager3, null));
titleStrip.setDrawFullUnderline(false); //设置是否取消下划线
titleStrip.setBackgroundColor(Color.RED); //设置背景颜色
titleStrip.setTabIndicatorColor(Color.GREEN); //设置选中项的下划线颜色
titles = new ArrayList<String>();
titles.add("孤独的身影");
titles.add("长腿的小鸡");
titles.add("长长的脖子");
MyPagerAdapter adapter = new MyPagerAdapter();
vp.setAdapter(adapter);
}
class MyPagerAdapter extends PagerAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(list.get(position));
return list.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(list.get(position));
}
//设定指定的位置上对应的内容
@Override
public CharSequence getPageTitle(int position) {
return titles.get(position);
}
}
}
<RelativeLayout 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" >
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.PagerTabStrip
android:id="@+id/titlestrip"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</android.support.v4.view.PagerTabStrip>
</android.support.v4.view.ViewPager>
</RelativeLayout>
实例二:
public class MainActivity extends FragmentActivity implements OnClickListener {
private ViewPager vp;
private Button btn1, btn2, btn3;
private ImageView line1, line2, line3;
private List<Fragment> fragments;
private List<ImageView>lineList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
initComponent();
initEvent();
lineList = new ArrayList<ImageView>();
lineList.add(line1);
lineList.add(line2);
lineList.add(line3);
initPager();
}
private void initPager() {
fragments = new ArrayList<Fragment>();
for (int i = 0; i < 3; i++) {
OneFragment f1 = new OneFragment();
Bundle bundle = new Bundle();
bundle.putInt("key", i);
f1.setArguments(bundle);
fragments.add(f1);
}
MyPagerAdapter adapter = new MyPagerAdapter(
getSupportFragmentManager(), fragments);
vp.setAdapter(adapter);
vp.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int pos) {
for (int i = 0; i < lineList.size(); i++) {
lineList.get(i).setVisibility(View.INVISIBLE);
}
lineList.get(pos).setVisibility(View.VISIBLE);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
private void initComponent() {
vp = (ViewPager) findViewById(R.id.vp);
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);
btn3 = (Button) findViewById(R.id.btn3);
line1 = (ImageView) findViewById(R.id.line1);
line2 = (ImageView) findViewById(R.id.line2);
line3 = (ImageView) findViewById(R.id.line3);
}
private void initEvent() {
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
//点击按钮时,viewpager发生切换,这个按钮下面的线显示出来,其他按钮的线隐藏起来。
line2.setVisibility(View.INVISIBLE);
line1.setVisibility(View.VISIBLE);
line3.setVisibility(View.INVISIBLE);
vp.setCurrentItem(0);
break;
case R.id.btn2:
line1.setVisibility(View.INVISIBLE);
line2.setVisibility(View.VISIBLE);
line3.setVisibility(View.INVISIBLE);
vp.setCurrentItem(1);
break;
case R.id.btn3:
line2.setVisibility(View.INVISIBLE);
line3.setVisibility(View.VISIBLE);
line1.setVisibility(View.INVISIBLE);
vp.setCurrentItem(2);
break;
default:
break;
}
}
}
public class MyPagerAdapter extends FragmentPagerAdapter{
List<Fragment>list;
public MyPagerAdapter(FragmentManager fm,List<Fragment>list) {
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int arg0) {
return list.get(arg0);
}
@Override
public int getCount() {
return list.size();
}
}
public class OneFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_layout, null);
TextView tv = (TextView) view.findViewById(R.id.tv);
Bundle bundle = getArguments();
switch (bundle.getInt("key")) {
case 0:
tv.setText("第一项");
break;
case 1:
tv.setText("第二项");
break;
case 2:
tv.setText("第三项");
break;
default:
break;
}
return view;
}
}
如图: