生活随笔
收集整理的這篇文章主要介紹了
viewPager开启界面导航之旅
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
當(dāng)下載一個app時,首次使用都會出現(xiàn)界面導(dǎo)航頁面,今天就來寫一個簡單的頁面導(dǎo)航,由于本人比較懶,隨便找了一張圖片,你可以按照你的想法換掉,廢話少說,開始界面導(dǎo)航之旅
首先先寫一個不到導(dǎo)航小圓點的界面導(dǎo)航,先單純的使用viewPager實現(xiàn)界面滑動,然后加入小圓點即可實現(xiàn)常見的首次登陸出現(xiàn)導(dǎo)航頁面
先上圖,方便大家觀看:
下面貼一下主要代碼:
[java]?view plaincopy
package?com.sdufe.thea.guo;?? ?? import?java.util.ArrayList;?? import?java.util.List;?? ?? import?com.sdufe.thea.guo.adapter.MyNavigationAdapter;?? ?? import?android.os.Bundle;?? import?android.app.Activity;?? import?android.support.v4.view.ViewPager;?? import?android.support.v4.view.ViewPager.OnPageChangeListener;?? import?android.view.LayoutInflater;?? import?android.view.Menu;?? import?android.view.View;?? import?android.view.View.OnClickListener;?? import?android.view.Window;?? import?android.view.WindowManager;?? import?android.widget.Button;?? import?android.widget.Toast;?? ?? public?class?MainActivity?extends?Activity?implements?OnClickListener,?? ????????OnPageChangeListener?{?? ?? ????private?List<View>?views;?? ????private?ViewPager?viewPager;?? ????private?MyNavigationAdapter?adapter;?? ????private?View?view01;?? ????private?View?view02;?? ????private?View?view03;?? ?? ????@Override?? ????protected?void?onCreate(Bundle?savedInstanceState)?{?? ????????super.onCreate(savedInstanceState);?? ?? ????????requestWindowFeature(Window.FEATURE_NO_TITLE);?? ?? ????????setContentView(R.layout.activity_main);?? ?? ????????getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,?? ????????????????WindowManager.LayoutParams.FLAG_FULLSCREEN);?? ?? ????????viewPager?=?(ViewPager)?findViewById(R.id.viewpager);?? ?? ????????views?=?new?ArrayList<View>();?? ?? ????????view01?=?LayoutInflater.from(this).inflate(R.layout.view01,?null);?? ????????view02?=?LayoutInflater.from(this).inflate(R.layout.view02,?null);?? ????????view03?=?LayoutInflater.from(this).inflate(R.layout.view03,?null);?? ????????views.add(view01);?? ????????views.add(view02);?? ????????views.add(view03);?? ?? ????????adapter?=?new?MyNavigationAdapter(views);?? ?? ????????viewPager.setAdapter(adapter);?? ????????viewPager.setOnPageChangeListener(this);?? ????????Button?begin?=?(Button)?view03.findViewById(R.id.begin);?? ?? ????????begin.setOnClickListener(this);?? ????}?? ?? ????@Override?? ????public?void?onClick(View?v)?{?? ????????Toast.makeText(getApplicationContext(),?"開啟CSND之旅",?Toast.LENGTH_LONG)?? ????????????????.show();?? ????}?? ?? ????@Override?? ????public?void?onPageScrollStateChanged(int?arg0)?{?? ?? ????}?? ?? ????@Override?? ????public?void?onPageScrolled(int?arg0,?float?arg1,?int?arg2)?{?? ?? ????}?? ?? ????@Override?? ????public?void?onPageSelected(int?arg0)?{?? ????????viewPager.setCurrentItem(arg0);?? ????}?? ?? }??
以上就是主要代碼了,主要是使用view填充viewpager的控件,對于viewPager的使用跟ListView是差不多的,都遇到個adapter,這里也貼一下adapter的代碼,有疑問的可以留言
[java]?view plaincopy
package?com.sdufe.thea.guo.adapter;?? ?? import?java.util.List;?? ?? import?android.support.v4.view.PagerAdapter;?? import?android.support.v4.view.ViewPager;?? import?android.view.View;?? ?? public?class?MyNavigationAdapter?extends?PagerAdapter?{?? ?????? ????List<View>?views;?? ?????? ????public?MyNavigationAdapter(List<View>?views)?{?? ????????super();?? ????????this.views?=?views;?? ????}?? ?? ????@Override?? ????public?int?getCount()?{?? ????????if?(views!=null)?{?? ????????????return?views.size();?? ????????}?? ????????return?0;?? ????}?? ?? ????@Override?? ????public?boolean?isViewFromObject(View?arg0,?Object?arg1)?{?? ????????return?arg0==arg1;?? ????}?? ?? ????@Override?? ????public?void?destroyItem(View?container,?int?position,?Object?object)?{?? ????????((ViewPager)container).removeView(views.get(position));?? ????}?? ?? ????@Override?? ????public?Object?instantiateItem(View?container,?int?position)?{?? ????????((ViewPager)container).addView(views.get(position));?? ????????return?views.get(position);?? ????}?? ?????? ?????? ?? }??
還有就是viewPager的布局文件了,這里給個查詢viewpager的快速方法,按ctrl+shirft+T,輸入viewPager即可出現(xiàn)你需要的內(nèi)容
[html]?view plaincopy
<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/viewpager"?? ????????android:layout_width="match_parent"?? ????????android:layout_height="match_parent"?/>?? ?????? ????<LinearLayout?? ????????android:id="@+id/point"?? ????????android:layout_width="match_parent"?? ????????android:layout_height="wrap_content"?? ????????android:layout_alignParentBottom="true"?? ????????android:gravity="center"?? ????????android:orientation="horizontal"??? ????????android:visibility="gone">?? ?? ????????<ImageView?? ????????????android:layout_width="wrap_content"?? ????????????android:layout_height="wrap_content"??? ????????????android:src="@drawable/point"/>?? ????????<ImageView?? ????????????android:layout_width="wrap_content"?? ????????????android:layout_height="wrap_content"??? ????????????android:src="@drawable/point"/>?? ????????<ImageView?? ????????????android:layout_width="wrap_content"?? ????????????android:layout_height="wrap_content"??? ????????????android:src="@drawable/point"/>?? ????</LinearLayout>?? ?? </RelativeLayout>??
ok用viewPager實現(xiàn)左右滑動就結(jié)束了,就這么簡單,搞清楚原理實現(xiàn)起了就很快了
下面來說一說帶有小圓點的界面導(dǎo)航,也就是你所下載的app首次安裝時出現(xiàn)的界面導(dǎo)航了
實現(xiàn)了基本的左右滑動,實現(xiàn)小圓點滑動就比較簡單了,首先來個選擇器,用于滑動時改變小圓點的顏色:
[html]?view plaincopy
<?xml?version="1.0"?encoding="utf-8"?>?? <selector?xmlns:android="http://schemas.android.com/apk/res/android"?>?? ????<item?android:state_enabled="false"?android:drawable="@drawable/indicator_normal"></item>?? ????<item?android:state_enabled="true"?android:drawable="@drawable/indicator_highlight"></item>?? </selector>??
然后初始化圓點,并且在onPageSelected(int arg0)控制圓點背景色的改變
[java]?view plaincopy
package?com.sdufe.thea.guo;?? ?? import?java.util.ArrayList;?? import?java.util.List;?? ?? import?com.sdufe.thea.guo.adapter.MyNavigationAdapter;?? ?? import?android.os.Bundle;?? import?android.app.Activity;?? import?android.support.v4.view.ViewPager;?? import?android.support.v4.view.ViewPager.OnPageChangeListener;?? import?android.view.LayoutInflater;?? import?android.view.Menu;?? import?android.view.View;?? import?android.view.View.OnClickListener;?? import?android.view.Window;?? import?android.view.WindowManager;?? import?android.widget.Button;?? import?android.widget.ImageView;?? import?android.widget.LinearLayout;?? import?android.widget.Toast;?? ?? public?class?MainActivity?extends?Activity?implements?OnClickListener,?? ????????OnPageChangeListener?{?? ?? ????private?List<View>?views;?? ????private?ViewPager?viewPager;?? ????private?MyNavigationAdapter?adapter;?? ????private?View?view01;?? ????private?View?view02;?? ????private?View?view03;?? ????private?LinearLayout?points;?? ????private?ImageView[]?point;?? ????private?int?currentItem;?? ?? ????@Override?? ????protected?void?onCreate(Bundle?savedInstanceState)?{?? ????????super.onCreate(savedInstanceState);?? ?? ????????requestWindowFeature(Window.FEATURE_NO_TITLE);?? ?? ????????setContentView(R.layout.activity_main);?? ?? ????????getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,?? ????????????????WindowManager.LayoutParams.FLAG_FULLSCREEN);?? ?? ????????viewPager?=?(ViewPager)?findViewById(R.id.viewpager);?? ?? ????????views?=?new?ArrayList<View>();?? ?? ????????view01?=?LayoutInflater.from(this).inflate(R.layout.view01,?null);?? ????????view02?=?LayoutInflater.from(this).inflate(R.layout.view02,?null);?? ????????view03?=?LayoutInflater.from(this).inflate(R.layout.view03,?null);?? ????????views.add(view01);?? ????????views.add(view02);?? ????????views.add(view03);?? ?? ????????adapter?=?new?MyNavigationAdapter(views);?? ?? ????????viewPager.setAdapter(adapter);?? ????????viewPager.setOnPageChangeListener(this);?? ????????Button?begin?=?(Button)?view03.findViewById(R.id.begin);?? ?? ????????begin.setOnClickListener(this);?? ?????????? ????????initPoint();?? ????}?? ?? ????private?void?initPoint()?{?? ????????points=(LinearLayout)?findViewById(R.id.point);?? ????????point=new?ImageView[views.size()];?? ?????????? ????????for?(int?i?=?0;?i?<?views.size();?i++)?{?? ????????????point[i]=(ImageView)?points.getChildAt(i);?? ????????????point[i].setEnabled(false);?? ????????????point[i].setTag(i);?? ????????}?? ?????????? ????????currentItem=0;?? ????????point[currentItem].setEnabled(true);?? ????}?? ?? ????@Override?? ????public?void?onClick(View?v)?{?? ????????Toast.makeText(getApplicationContext(),?"開啟CSND之旅",?Toast.LENGTH_LONG)?? ????????????????.show();?? ????}?? ?? ????@Override?? ????public?void?onPageScrollStateChanged(int?arg0)?{?? ?? ????}?? ?? ????@Override?? ????public?void?onPageScrolled(int?arg0,?float?arg1,?int?arg2)?{?? ?? ????}?? ?? ????@Override?? ????public?void?onPageSelected(int?arg0)?{?? ????????point[currentItem].setEnabled(false);?? ????????point[arg0].setEnabled(true);?? ????????currentItem=arg0;?? ????}?? ?? }??
結(jié)束,有疑問的留言我會回答你的問題
代碼下載地址:http://download.csdn.net/detail/elinavampire/8166773
總結(jié)
以上是生活随笔為你收集整理的viewPager开启界面导航之旅的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。