如今的大部分android軟件,都是使用說明,就是第一次使用該軟件時,會出現嚮導,能夠左右滑動,而後就進入應用的主界面了。java
先看下效果圖:android
首先須要一個佈局文件,是FlameLayout組成的,裏面包含了一個ViewPager和一個RelativeLayout,RelativeLayout裏面是一個LinearLayout,LinearLayout裏面是準備放ImageView,動態添加。app
佈局文件以下:ide
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/guidePages" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom"> <LinearLayout android:id="@+id/viewGroup" android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center" android:layout_marginBottom="30dip"> </LinearLayout> </RelativeLayout> </FrameLayout>
另外咱們須要4個佈局文件,就是嚮導要顯示的圖片,每一個佈局文件是一頁,每一個佈局文件裏面都是一個ImageView。以下所示:佈局
佈局文件一:ui
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" > 6 7 <ImageView 8 android:layout_width="match_parent" 9 android:layout_height="match_parent" 10 android:src="@drawable/feature_guide_0"/>" 11 12 </LinearLayout>
佈局文件二:this
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" > 6 7 <ImageView 8 android:layout_width="match_parent" 9 android:layout_height="match_parent" 10 android:src="@drawable/feature_guide_1"/> 11 12 </LinearLayout>
佈局文件三:spa
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" > 6 7 <ImageView 8 android:layout_width="match_parent" 9 android:layout_height="match_parent" 10 android:src="@drawable/feature_guide_2"/>" 11 12 </LinearLayout>
佈局文件四:3d
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" > 6 7 <ImageView 8 android:layout_width="match_parent" 9 android:layout_height="match_parent" 10 android:src="@drawable/feature_guide_3"/>" 11 12 </LinearLayout>
而後在代碼裏面加載這4個佈局文件和主佈局文件:rest
Activity代碼:
1 package com.alex.helloworld; 2 3 import java.util.ArrayList; 4 5 import android.app.Activity; 6 import android.os.Bundle; 7 import android.os.Parcelable; 8 import android.support.v4.view.PagerAdapter; 9 import android.support.v4.view.ViewPager; 10 import android.support.v4.view.ViewPager.OnPageChangeListener; 11 import android.view.LayoutInflater; 12 import android.view.View; 13 import android.view.ViewGroup.LayoutParams; 14 import android.view.Window; 15 import android.widget.FrameLayout; 16 import android.widget.ImageView; 17 import android.widget.LinearLayout; 18 19 public class HelloWord2 extends Activity implements OnPageChangeListener { 20 21 private ArrayList<View> mPageViews; 22 private LayoutInflater mInflater; 23 private LinearLayout mGroups; 24 private FrameLayout mMain; 25 private ViewPager mViewPager; 26 private ImageView[] mImageViews; 27 28 @Override 29 protected void onCreate(Bundle savedInstanceState) { 30 super.onCreate(savedInstanceState); 31 requestWindowFeature(Window.FEATURE_NO_TITLE); 32 mInflater = LayoutInflater.from(this); 33 mPageViews = new ArrayList<View>(); 34 mPageViews.add(mInflater.inflate(R.layout.item_0, null)); 35 mPageViews.add(mInflater.inflate(R.layout.item_1, null)); 36 mPageViews.add(mInflater.inflate(R.layout.item_2, null)); 37 mPageViews.add(mInflater.inflate(R.layout.item_3, null)); 38 39 mMain = (FrameLayout) mInflater.inflate(R.layout.hello2, null); 40 mGroups = (LinearLayout) mMain.findViewById(R.id.viewGroup); 41 mViewPager = (ViewPager) mMain.findViewById(R.id.guidePages); 42 mImageViews = new ImageView[mPageViews.size()]; 43 44 for(int i=0; i<mPageViews.size(); i++) { 45 ImageView iv = new ImageView(this); 46 iv.setLayoutParams(new LayoutParams(20, 20)); 47 mImageViews[i] = iv; 48 if(i == 0) { 49 mImageViews[i].setBackgroundResource(R.drawable.page_indicator_focused); 50 } else { 51 mImageViews[i].setBackgroundResource(R.drawable.page_indicator); 52 } 53 mGroups.addView(mImageViews[i]); 54 } 55 mViewPager.setAdapter(mPageAdapter); 56 mViewPager.setOnPageChangeListener(this); 57 setContentView(mMain); 58 } 59 60 private PagerAdapter mPageAdapter = new PagerAdapter() { 61 62 @Override 63 public void startUpdate(View arg0) { 64 65 } 66 67 @Override 68 public Parcelable saveState() { 69 return null; 70 } 71 72 @Override 73 public void restoreState(Parcelable arg0, ClassLoader arg1) { 74 75 } 76 77 @Override 78 public boolean isViewFromObject(View arg0, Object arg1) { 79 return arg0 == arg1; 80 } 81 82 @Override 83 public Object instantiateItem(View arg0, int arg1) { 84 ((ViewPager)arg0).addView(mPageViews.get(arg1)); 85 return mPageViews.get(arg1); 86 } 87 88 @Override 89 public int getCount() { 90 return mPageViews.size(); 91 } 92 93 @Override 94 public void finishUpdate(View arg0) { 95 96 } 97 98 @Override 99 public void destroyItem(View arg0, int arg1, Object arg2) { 100 ((ViewPager)arg0).removeView(mPageViews.get(arg1)); 101 } 102 }; 103 104 @Override 105 public void onPageScrolled(int position, float positionOffset, 106 int positionOffsetPixels) { 107 108 } 109 110 @Override 111 public void onPageSelected(int position) { 112 for(int i=0; i<mPageViews.size(); i++) { 113 mImageViews[position].setBackgroundResource(R.drawable.page_indicator_focused); 114 if(position != i) { 115 mImageViews[i].setBackgroundResource(R.drawable.page_indicator); 116 } 117 } 118 } 119 120 @Override 121 public void onPageScrollStateChanged(int state) { 122 123 } 124 }
首先從LayoutInflater裏面加載4個要顯示的佈局和主佈局文件。
而後把佈局文件做爲View放到一個ArrayList裏面。
而後從主佈局裏面找到ViewPager和LinearLayout,ViewPager用來裝載4個佈局文件,LinearLayout用來裝載4個提示圖標。
而後新建4個ImageView,並設置對應的背景,而後做爲View添加到LinearLayout裏面去。
而後給ViewPager設置Adapter,設置onPageChangeListener。
Adapter裏面要設置getCount,就是頁面的個數,咱們這裏是4個,就設置4;
同時在instantiateItem裏面講對應的頁面add進去,並返回對應的頁面。
在destroyItem的時候講頁面remove掉。
在選擇頁面的方法裏面onPageSelected裏面設置選中圖標的背景。
就這些。
下載源代碼:請點我!