ViewPager之引导界面---实现欢迎引导页面

最近在看ViewPager,于是乎弄个引导界面来玩玩.....

引导界面,采用现在比较主流的方式:左右滑动加载;小圆点提示;在最后一个页面,点击button,进入功能界面

第一种: ViewFlipper + GestureDetector

第二种: ActivityGroup +   GestureDetector

第三种: ViewPager  (Android3.0+)

第四种: ViewFlow (开源项目)

这里弄的是第三种,

一、先看的效果图

ViewPager之引导界面---实现欢迎引导页面_第1张图片ViewPager之引导界面---实现欢迎引导页面_第2张图片

二、编码前准备

       ViewPager是Android3.0之后提供的新特性,所以要想让你的应用向下兼容就必须要android-support-v4.jar这个包的支持,这是一个来自google提供的一个附加包。

项目结构图 : ViewPager之引导界面---实现欢迎引导页面_第3张图片


1、  布局界面,加入ViewPager组件,以及底部的引导小点,guide_layout.xml:

[html]  view plain  copy
 
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content">  
  5.   
  6.     <android.support.v4.view.ViewPager  
  7.         android:id="@+id/viewpager"  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="fill_parent" />  
  10.   
  11.     <LinearLayout  
  12.         android:id="@+id/point"  
  13.         android:layout_width="wrap_content"  
  14.         android:layout_height="wrap_content"  
  15.         android:layout_alignParentBottom="true"  
  16.         android:layout_centerHorizontal="true"  
  17.         android:layout_marginBottom="24.0dip"  
  18.         android:orientation="horizontal"  
  19.         >  
  20.    
  21.         <ImageView  
  22.             android:layout_width="wrap_content"  
  23.             android:layout_height="wrap_content"  
  24.             android:layout_gravity="center_vertical"  
  25.             android:clickable="true"  
  26.             android:padding="15.0dip"  
  27.             android:src="@drawable/point"/>  
  28.    
  29.         <ImageView  
  30.             android:layout_width="wrap_content"  
  31.             android:layout_height="wrap_content"  
  32.             android:layout_gravity="center_vertical"  
  33.             android:clickable="true"  
  34.             android:padding="15.0dip"  
  35.             android:src="@drawable/point"/>  
  36.    
  37.         <ImageView  
  38.             android:layout_width="wrap_content"  
  39.             android:layout_height="wrap_content"  
  40.             android:layout_gravity="center_vertical"  
  41.             android:clickable="true"  
  42.             android:padding="15.0dip"  
  43.             android:src="@drawable/point"/>  
  44.    
  45.         <ImageView  
  46.             android:layout_width="wrap_content"  
  47.             android:layout_height="wrap_content"  
  48.             android:layout_gravity="center_vertical"  
  49.             android:clickable="true"  
  50.             android:padding="15.0dip"  
  51.             android:src="@drawable/point"/>  
  52.     LinearLayout>  
  53. RelativeLayout>  
guide_page1.xml  注guide_page2.xml,guide_page3.xml布局一样

[html]  view plain  copy
 
  1. xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/guide1"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     android:background="@drawable/view_guide1"  
  7.     android:orientation="vertical" >  
  8.   
  9. LinearLayout>  
guide_page4.xml

[html]  view plain  copy
 
  1. xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/guide4"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     android:orientation="vertical" android:background="@drawable/view_guide4">  
  7.   
  8.     <LinearLayout  
  9.         android:id="@+id/layout1"  
  10.         android:layout_width="match_parent"  
  11.         android:layout_height="100dp"  
  12.         android:layout_alignParentBottom="true"  
  13.         android:orientation="vertical" android:gravity="center_vertical">  
  14.   
  15.         <Button  
  16.             android:id="@+id/ok"  
  17.             android:layout_width="fill_parent"  
  18.             android:layout_height="wrap_content"  
  19.             android:layout_marginLeft="5dp"  
  20.             android:layout_marginRight="5dp"  
  21.             android:layout_marginTop="5dp"  
  22.             android:gravity="center"  
  23.             android:layout_gravity="center_vertical|center_horizontal"  
  24.             android:text="马上体验"  
  25.             android:background="@drawable/start_btn" />  
  26.   
  27.     LinearLayout>  
  28.   
  29. RelativeLayout>  

point.xml:控制小点的图片,用一个selector来控制颜色

[html]  view plain  copy
 
  1. xml version="1.0" encoding="UTF-8"?>  
  2. <selector  
  3.   xmlns:android="http://schemas.android.com/apk/res/android">  
  4.     <item android:state_enabled="true" android:drawable="@drawable/point_normal" />  
  5.     <item android:state_enabled="false" android:drawable="@drawable/point_select" />  
  6. selector>  

三、主程序入口类, MainActivity.java:

[html]  view plain  copy
 
  1. public class MainActivity extends Activity implements OnClickListener,OnPageChangeListener {  
  2.     //定义ViewPager对象  
  3.     private ViewPager viewPager;  
  4.       
  5.     //定义ViewPager适配器  
  6.     private ViewPagerAdapter vpAdapter;  
  7.       
  8.     //定义一个ArrayList来存放View  
  9.     private ArrayList<View> views;  
  10.   
  11.     // 定义各个界面View对象  
  12.     private View view1, view2, view3, view4;  
  13.           
  14.     //底部小点的图片  
  15.     private ImageView[] points;  
  16.       
  17.     //记录当前选中位置  
  18.     private int currentIndex;  
  19.       
  20.     
  21.       
  22.     @Override  
  23.     protected void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.           
  26.         setContentView(R.layout.guide_layout);  
  27.           
  28.         initView();  
  29.         initData();   
  30.     }  
  31.   
  32.     /**  
  33.      * 初始化组件  
  34.      */  
  35.     private void initView() {  
  36.         //实例化各个界面的布局对象   
  37.         LayoutInflater mLi = LayoutInflater.from(this);  
  38.         view1 = mLi.inflate(R.layout.guide_page1, null);  
  39.         view2 = mLi.inflate(R.layout.guide_page2, null);  
  40.         view3 = mLi.inflate(R.layout.guide_page3, null);  
  41.         view4 = mLi.inflate(R.layout.guide_page4, null);  
  42.       
  43.         // 实例化ViewPager  
  44.         viewPager = (ViewPager) findViewById(R.id.viewpager);  
  45.         // 实例化ArrayList对象  
  46.         views = new ArrayList<View>();  
  47.         // 实例化ViewPager适配器  
  48.         vpAdapter = new ViewPagerAdapter(views);  
  49.         //实例化开始按钮  
  50.         //startBt = (Button) view4.findViewById(R.id.startBtn);  
  51.     }  
  52.     /**  
  53.      * 初始化数据  
  54.      */  
  55.     private void initData() {  
  56.         // 设置监听  
  57.         viewPager.setOnPageChangeListener(this);  
  58.         // 设置适配器数据  
  59.         viewPager.setAdapter(vpAdapter);  
  60.   
  61.         //将要分页显示的View装入数组中        
  62.         views.add(view1);  
  63.         views.add(view2);  
  64.         views.add(view3);  
  65.         views.add(view4);         
  66.               
  67.         //初始化底部小点  
  68.         initPoint(views.size());  
  69.     }  
  70.     /**  
  71.      * 初始化底部小点  
  72.      */  
  73.     private void initPoint(int views){  
  74.         LinearLayout linearLayout = (LinearLayout) findViewById(R.id.point);         
  75.           
  76.         points = new ImageView[views];  
  77.   
  78.         //循环取得小点图片  
  79.         for (int i = 0; i < views; i++) {  
  80.             //得到一个LinearLayout下面的每一个子元素  
  81.             points[i] = (ImageView) linearLayout.getChildAt(i);  
  82.             //默认都设为灰色  
  83.             points[i].setEnabled(true);  
  84.             //给每个小点设置监听  
  85.             points[i].setOnClickListener(this);  
  86.             //设置位置tag,方便取出与当前位置对应  
  87.             points[i].setTag(i);  
  88.         }  
  89.           
  90.         //设置当面默认的位置  
  91.         currentIndex = 0;  
  92.         //设置为白色,即选中状态  
  93.         points[currentIndex].setEnabled(false);  
  94.     }  
  95.       
  96.     /**  
  97.      * 当滑动状态改变时调用  
  98.      */  
  99.     @Override  
  100.     public void onPageScrollStateChanged(int arg0) {  
  101.   
  102.     }  
  103.       
  104.     /**  
  105.      * 当当前页面被滑动时调用  
  106.      */  
  107.   
  108.     @Override  
  109.     public void onPageScrolled(int arg0, float arg1, int arg2) {  
  110.   
  111.     }  
  112.       
  113.     /**  
  114.      * 当新的页面被选中时调用  
  115.      */  
  116.   
  117.     @Override  
  118.     public void onPageSelected(int position) {  
  119.         //设置底部小点选中状态  
  120.         setCurDot(position);  
  121.     }  
  122.   
  123.     /**  
  124.      * 通过点击事件来切换当前的页面  
  125.      */  
  126.     @Override  
  127.     public void onClick(View v) {  
  128.          int position = (Integer)v.getTag();  
  129.          setCurView(position);  
  130.          setCurDot(position);         
  131.     }  
  132.   
  133.     /**  
  134.      * 设置当前页面的位置  
  135.      */  
  136.     private void setCurView(int position){  
  137.          if (position < 0 || position >= 4) {  
  138.              return;  
  139.          }  
  140.          viewPager.setCurrentItem(position);  
  141.      }  
  142.   
  143.      /**  
  144.      * 设置当前的小点的位置  
  145.      */  
  146.     private void setCurDot(int positon){  
  147.          if (positon < 0 || positon > 3 || currentIndex == positon) {  
  148.              return;  
  149.          }  
  150.          points[positon].setEnabled(false);  
  151.          points[currentIndex].setEnabled(true);  
  152.   
  153.          currentIndex = positon;  
  154.      }  
  155.       

ViewPager适配器代码, ViewPagerAdapter.java:

[java]  view plain  copy
 
  1. public class ViewPagerAdapter extends PagerAdapter {  
  2.       
  3.     //界面列表  
  4.     private ArrayList views;  
  5.       
  6.     public ViewPagerAdapter (ArrayList views){  
  7.         this.views = views;  
  8.     }  
  9.          
  10.     /** 
  11.      * 获得当前界面数 
  12.      */  
  13.     @Override  
  14.     public int getCount() {  
  15.          if (views != null) {  
  16.              return views.size();  
  17.          }        
  18.          return 0;  
  19.     }  
  20.   
  21.     /** 
  22.      * 初始化position位置的界面 
  23.      */  
  24.     @Override  
  25.     public Object instantiateItem(View view, int position) {  
  26.          
  27.         ((ViewPager) view).addView(views.get(position), 0);  
  28.          
  29.         return views.get(position);  
  30.     }  
  31.       
  32.     /** 
  33.      * 判断是否由对象生成界面 
  34.      */  
  35.     @Override  
  36.     public boolean isViewFromObject(View view, Object arg1) {  
  37.         return (view == arg1);  
  38.     }  
  39.   
  40.     /** 
  41.      * 销毁position位置的界面 
  42.      */  
  43.     @Override  
  44.     public void destroyItem(View view, int position, Object arg2) {  
  45.         ((ViewPager) view).removeView(views.get(position));         
  46.     }  


参考:

http://www.apkbus.com/portal.php?mod=view&aid=4206


源码可以自己到我的资源库下载http://download.csdn.net/detail/h378588270/8291497

你可能感兴趣的:(android)