使用ViewPager实现简单软件开机引导功能

 我理解的ViewPager是一个容器,跟ListView类似,需要跟适配器(PagerAdapter)搭配使用。

 在布局文件中声明ViewPager十分简单,跟其他控件一样。

<android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

 然后在Activity里面获得。

mViewPager = (ViewPager)findViewById(R.id.viewPager);

 ViewPager这个容器现在已经创建成功了,需要在界面上显示数据的话,就要将数据装入ViewPager容器。  通过方法setAdapter来实现数据装入。

 定义一个类,继承PagerAdapter,重写里面的方法。

private class MyPagerAdapter extends PagerAdapter {
		@Override
		public int getCount() {
			return mGuideImageId.length;
		}

		@Override
		public Object instantiateItem(View arg0, int arg1) {
			ImageView view = new ImageView(MainActivity.this);
			view.setImageResource(mGuideImageId[arg1]);
			view.setScaleType(ScaleType.CENTER_CROP);
			if(arg1 == (mGuideImageId.length-1)){//最后一个页面监听点击事件,启动APP
				view.setOnClickListener(new OnClickListener() {
					@Override
					public void onClick(View arg0) {
						Intent intent = new Intent(MainActivity.this, AppActivity.class);
						startActivity(intent);
						finish();
					}
				});
			}
			((ViewPager)arg0).addView(view);
			return view;
		}

		@Override  
		public int getItemPosition(Object object) {  
			return POSITION_NONE;  
		}

		@Override
		public void destroyItem(View arg0, int arg1, Object arg2) {
			((ViewPager)arg0).removeView((ImageView)arg2);
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}

		@Override
		public void restoreState(Parcelable arg0, ClassLoader arg1) {

		}

		@Override
		public Parcelable saveState() {
			return null;
		}

		@Override
		public void startUpdate(View arg0) {

		}

		@Override
		public void finishUpdate(View arg0) {

		}
	}

  其中比较重要的方法就是

      getCount:该方法的返回值表示该ViewPager有几个页面

      instantiateItem:初始化显示界面

      destroyItem:移除显示界面

 最后通过setAdapter方法将适配器与容器绑定

mViewPager.setAdapter(mMyPagerAdapter);

 现在ViewPager已经能实现图片的切换,并且在最后一幅图片被点击时,会启动新的Activity!!!

 

现在要实现在每个界面的底部设置小圆点来表示ViewPager总共有几个界面和当前显示的是第几个界面。效果如下:



 

 1 在布局文件里加上一个LinearLayout作为小圆点的父控件

<LinearLayout
        android:id="@+id/layoutIndicator"
        android:layout_width="fill_parent"
        android:layout_height="10dp"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="20dp"
        android:gravity="center_horizontal"
        android:orientation="horizontal" >
</LinearLayout>

  2 在Activity里面根据界面的个数动态的添加小圆点

mLayoutIndicator = (LinearLayout)findViewById(R.id.layoutIndicator);
for(int i = 0; i < mGuideImageId.length; i++) {
	ImageView imageView = new ImageView(this);
	imageView.setImageResource(R.drawable.guide_page_indicator);
	LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(10, 10);
	lp.setMargins(0, 0, 5, 0);
	imageView.setLayoutParams(lp);
	mLayoutIndicator.addView(imageView);
}
((ImageView)mLayoutIndicator.getChildAt(0)).setImageResource(R.drawable.guide_page_indicator_focused);//设置当前显示的界面小圆点与其他的不同

  3 监听ViewPager的界面改变事件,当界面改变时,小圆点也要跟着改变。

 

mViewPager.setOnPageChangeListener(new OnPageChangeListener(){
			public void onPageSelected(int position) {
				((ImageView)mLayoutIndicator.getChildAt(position)).setImageResource(R.drawable.guide_page_indicator_focused);
				((ImageView)mLayoutIndicator.getChildAt(mImgIndex)).setImageResource(R.drawable.guide_page_indicator);
				mImgIndex = position;
			}

			public void onPageScrollStateChanged(int arg0) {

			}

			public void onPageScrolled(int arg0, float arg1, int arg2) {

			}
		});

 简单的程序启动引导功能就搞定了!

你可能感兴趣的:(viewpager)