简单介绍 ViewPager

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);  //设置背景颜色

  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;
	}
}
如图:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值