ViewPager界面导航

首先先写一个不到导航小圆点的界面导航,先单纯的使用viewPager实现界面滑动,然后加入小圆点即可实现常见的首次登陆出现导航页面

先上图,方便大家观看:

ViewPager界面导航_第1张图片ViewPager界面导航_第2张图片ViewPager界面导航_第3张图片

下面贴一下主要代码:

[java]  view plain copy
  1. package com.sdufe.thea.guo;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import com.sdufe.thea.guo.adapter.MyNavigationAdapter;  
  7.   
  8. import android.os.Bundle;  
  9. import android.app.Activity;  
  10. import android.support.v4.view.ViewPager;  
  11. import android.support.v4.view.ViewPager.OnPageChangeListener;  
  12. import android.view.LayoutInflater;  
  13. import android.view.Menu;  
  14. import android.view.View;  
  15. import android.view.View.OnClickListener;  
  16. import android.view.Window;  
  17. import android.view.WindowManager;  
  18. import android.widget.Button;  
  19. import android.widget.Toast;  
  20.   
  21. public class MainActivity extends Activity implements OnClickListener,  
  22.         OnPageChangeListener {  
  23.   
  24.     private List<View> views;  
  25.     private ViewPager viewPager;  
  26.     private MyNavigationAdapter adapter;  
  27.     private View view01;  
  28.     private View view02;  
  29.     private View view03;  
  30.   
  31.     @Override  
  32.     protected void onCreate(Bundle savedInstanceState) {  
  33.         super.onCreate(savedInstanceState);  
  34.   
  35.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  36.   
  37.         setContentView(R.layout.activity_main);  
  38.   
  39.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
  40.                 WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  41.   
  42.         viewPager = (ViewPager) findViewById(R.id.viewpager);  
  43.   
  44.         views = new ArrayList<View>();  
  45.   
  46.         view01 = LayoutInflater.from(this).inflate(R.layout.view01, null);  
  47.         view02 = LayoutInflater.from(this).inflate(R.layout.view02, null);  
  48.         view03 = LayoutInflater.from(this).inflate(R.layout.view03, null);  
  49.         views.add(view01);  
  50.         views.add(view02);  
  51.         views.add(view03);  
  52.   
  53.         adapter = new MyNavigationAdapter(views);  
  54.   
  55.         viewPager.setAdapter(adapter);  
  56.         viewPager.setOnPageChangeListener(this);  
  57.         Button begin = (Button) view03.findViewById(R.id.begin);  
  58.   
  59.         begin.setOnClickListener(this);  
  60.     }  
  61.   
  62.     @Override  
  63.     public void onClick(View v) {  
  64.         Toast.makeText(getApplicationContext(), "开启CSND之旅", Toast.LENGTH_LONG)  
  65.                 .show();  
  66.     }  
  67.   
  68.     @Override  
  69.     public void onPageScrollStateChanged(int arg0) {  
  70.   
  71.     }  
  72.   
  73.     @Override  
  74.     public void onPageScrolled(int arg0, float arg1, int arg2) {  
  75.   
  76.     }  
  77.   
  78.     @Override  
  79.     public void onPageSelected(int arg0) {  
  80.         viewPager.setCurrentItem(arg0);  
  81.     }  
  82.   
  83. }  

以上就是主要代码了,主要是使用view填充viewpager的控件,对于viewPager的使用跟ListView是差不多的,都遇到个adapter,这里也贴一下adapter的代码,有疑问的可以留言

[java]  view plain copy
  1. package com.sdufe.thea.guo.adapter;  
  2.   
  3. import java.util.List;  
  4.   
  5. import android.support.v4.view.PagerAdapter;  
  6. import android.support.v4.view.ViewPager;  
  7. import android.view.View;  
  8.   
  9. public class MyNavigationAdapter extends PagerAdapter {  
  10.       
  11.     List<View> views;  
  12.       
  13.     public MyNavigationAdapter(List<View> views) {  
  14.         super();  
  15.         this.views = views;  
  16.     }  
  17.   
  18.     @Override  
  19.     public int getCount() {  
  20.         if (views!=null) {  
  21.             return views.size();  
  22.         }  
  23.         return 0;  
  24.     }  
  25.   
  26.     @Override  
  27.     public boolean isViewFromObject(View arg0, Object arg1) {  
  28.         return arg0==arg1;  
  29.     }  
  30.   
  31.     @Override  
  32.     public void destroyItem(View container, int position, Object object) {  
  33.         ((ViewPager)container).removeView(views.get(position));  
  34.     }  
  35.   
  36.     @Override  
  37.     public Object instantiateItem(View container, int position) {  
  38.         ((ViewPager)container).addView(views.get(position));  
  39.         return views.get(position);  
  40.     }  
  41.       
  42.       
  43.   
  44. }  
还有就是viewPager的布局文件了,这里给个查询viewpager的快速方法,按ctrl+shirft+T,输入viewPager即可出现你需要的内容

[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="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.   
  6.     <android.support.v4.view.ViewPager  
  7.         android:id="@+id/viewpager"  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="match_parent" />  
  10.     <!-- 小圆点布局 -->  
  11.     <LinearLayout  
  12.         android:id="@+id/point"  
  13.         android:layout_width="match_parent"  
  14.         android:layout_height="wrap_content"  
  15.         android:layout_alignParentBottom="true"  
  16.         android:gravity="center"  
  17.         android:orientation="horizontal"   
  18.         android:visibility="gone">  
  19.   
  20.         <ImageView  
  21.             android:layout_width="wrap_content"  
  22.             android:layout_height="wrap_content"   
  23.             android:src="@drawable/point"/>  
  24.         <ImageView  
  25.             android:layout_width="wrap_content"  
  26.             android:layout_height="wrap_content"   
  27.             android:src="@drawable/point"/>  
  28.         <ImageView  
  29.             android:layout_width="wrap_content"  
  30.             android:layout_height="wrap_content"   
  31.             android:src="@drawable/point"/>  
  32.     </LinearLayout>  
  33.   
  34. </RelativeLayout>  
ok用viewPager实现左右滑动就结束了,就这么简单,搞清楚原理实现起了就很快了


下面来说一说带有小圆点的界面导航,也就是你所下载的app首次安装时出现的界面导航了

ViewPager界面导航_第4张图片ViewPager界面导航_第5张图片ViewPager界面导航_第6张图片

实现了基本的左右滑动,实现小圆点滑动就比较简单了,首先来个选择器,用于滑动时改变小圆点的颜色:

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

然后初始化圆点,并且在onPageSelected(int arg0)控制圆点背景色的改变

[java]  view plain copy
  1. package com.sdufe.thea.guo;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import com.sdufe.thea.guo.adapter.MyNavigationAdapter;  
  7.   
  8. import android.os.Bundle;  
  9. import android.app.Activity;  
  10. import android.support.v4.view.ViewPager;  
  11. import android.support.v4.view.ViewPager.OnPageChangeListener;  
  12. import android.view.LayoutInflater;  
  13. import android.view.Menu;  
  14. import android.view.View;  
  15. import android.view.View.OnClickListener;  
  16. import android.view.Window;  
  17. import android.view.WindowManager;  
  18. import android.widget.Button;  
  19. import android.widget.ImageView;  
  20. import android.widget.LinearLayout;  
  21. import android.widget.Toast;  
  22.   
  23. public class MainActivity extends Activity implements OnClickListener,  
  24.         OnPageChangeListener {  
  25.   
  26.     private List<View> views;  
  27.     private ViewPager viewPager;  
  28.     private MyNavigationAdapter adapter;  
  29.     private View view01;  
  30.     private View view02;  
  31.     private View view03;  
  32.     private LinearLayout points;  
  33.     private ImageView[] point;  
  34.     private int currentItem;  
  35.   
  36.     @Override  
  37.     protected void onCreate(Bundle savedInstanceState) {  
  38.         super.onCreate(savedInstanceState);  
  39.   
  40.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  41.   
  42.         setContentView(R.layout.activity_main);  
  43.   
  44.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
  45.                 WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  46.   
  47.         viewPager = (ViewPager) findViewById(R.id.viewpager);  
  48.   
  49.         views = new ArrayList<View>();  
  50.   
  51.         view01 = LayoutInflater.from(this).inflate(R.layout.view01, null);  
  52.         view02 = LayoutInflater.from(this).inflate(R.layout.view02, null);  
  53.         view03 = LayoutInflater.from(this).inflate(R.layout.view03, null);  
  54.         views.add(view01);  
  55.         views.add(view02);  
  56.         views.add(view03);  
  57.   
  58.         adapter = new MyNavigationAdapter(views);  
  59.   
  60.         viewPager.setAdapter(adapter);  
  61.         viewPager.setOnPageChangeListener(this);  
  62.         Button begin = (Button) view03.findViewById(R.id.begin);  
  63.   
  64.         begin.setOnClickListener(this);  
  65.           
  66.         initPoint();  
  67.     }  
  68.   
  69.     private void initPoint() {  
  70.         points=(LinearLayout) findViewById(R.id.point);  
  71.         point=new ImageView[views.size()];  
  72.           
  73.         for (int i = 0; i < views.size(); i++) {  
  74.             point[i]=(ImageView) points.getChildAt(i);  
  75.             point[i].setEnabled(false);  
  76.             point[i].setTag(i);  
  77.         }  
  78.           
  79.         currentItem=0;  
  80.         point[currentItem].setEnabled(true);  
  81.     }  
  82.   
  83.     @Override  
  84.     public void onClick(View v) {  
  85.         Toast.makeText(getApplicationContext(), "开启CSND之旅", Toast.LENGTH_LONG)  
  86.                 .show();  
  87.     }  
  88.   
  89.     @Override  
  90.     public void onPageScrollStateChanged(int arg0) {  
  91.   
  92.     }  
  93.   
  94.     @Override  
  95.     public void onPageScrolled(int arg0, float arg1, int arg2) {  
  96.   
  97.     }  
  98.   
  99.     @Override  
  100.     public void onPageSelected(int arg0) {  
  101.         point[currentItem].setEnabled(false);  
  102.         point[arg0].setEnabled(true);  
  103.         currentItem=arg0;  
  104.     }  
  105.   
  106. }  


结束,有疑问的留言我会回答你的问题


代码下载地址:http://download.csdn.net/detail/elinavampire/8166773

你可能感兴趣的:(viewpager,导航)