国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

安卓開發(fā)筆記——ViewPager組件(仿微信引導界面)

2019-11-14 21:08:47
字體:
供稿:網(wǎng)友
安卓開發(fā)筆記——ViewPager組件(仿微信引導界面)

這2天事情比較多,都沒時間更新博客,趁周末,繼續(xù)繼續(xù)~

今天來講個比較新潮的組件——ViewPager

什么是ViewPager?

ViewPager是安卓3.0之后提供的新特性,繼承自ViewGroup,專門用以實現(xiàn)左右滑動切換View的效果。

如果想向下兼容就必須要android-support-v4.jar這個包的支持,這是一個來自google提供的一個附加包。

通俗點來講,就是現(xiàn)在市面上大多數(shù)app,安裝完第一次打開軟件會出現(xiàn)的一個左右滑動的引導界面。

先來看下效果圖:

這是一個仿微信的引導界面,圖是我摳來的

實現(xiàn)功能:

能夠左右滑動頁面,下面對應(yīng)的小圓圈點順帶著走,也可以對小圓點進行點擊跳轉(zhuǎn)(有些人可能會采用把小圓點寫死,直接畫在界面上的背景圖,其實這個是個很不好的習慣,太不靈活,一旦改動起來,很不好維護)

其實要實現(xiàn)這種效果并不難,ViewPager這個控件和其他常見控件的實現(xiàn)方式大致相同(比如:ListView)

步驟:聲明實例化控件->設(shè)置數(shù)據(jù)源->配置適配器->綁定適配器->(添加監(jiān)聽)

聲明控件:

由于該類存在于Google的兼容包里面,所以在引用時記得在BuilldPath中加入“android-support-v4.jar”

1     <android.support.v4.view.ViewPager2         android:id="@+id/viewpager"3         android:layout_width="fill_parent"4         android:layout_height="fill_parent" />

數(shù)據(jù)源:

這里的是數(shù)據(jù)源是一個存放著View對象的集合:

實現(xiàn)方式有2種:

1、通過xml配置文件,把對應(yīng)的頁面設(shè)置好,然后把xml配置文件轉(zhuǎn)換成view對象并載入這個集合里

2、通過代碼動態(tài)生成,把生成的View對象載入到集合里。

適配器:

我們需要去繼承PagerAdapter類,并覆寫相對應(yīng)的方法(在下面代碼部分會詳細說)

下面提供必須實現(xiàn)的,最基本的幾個方法:

 1     @Override 2     public int getCount() {//返回頁面數(shù)量 3         return 0; 4     } 5  6     @Override 7     public boolean isViewFromObject(View arg0, Object arg1) {//判斷是否是view對象 8         return false; 9     }10     11     @Override12     public Object instantiateItem(View container, int position) {//實例化一個頁面13         return super.instantiateItem(container, position);14     }15     16     @Override17     public void destroyItem(View container, int position, Object object) {//銷毀一個頁面18         super.destroyItem(container, position, object);19     }

當然還可以設(shè)置更多樣式,比如給ViewPager的每個頁面都加入標題等,這里就不再多說,大家自己翻看API吧。

直接上代碼吧,本段代碼是采用XML布局文件靜態(tài)生成view對象的,其中有一段注釋是提供代碼動態(tài)生成view的方法,至于用哪個,看個人喜好了。

MainActivity.java(主程序類)

  1 package com.example.wx_viewpagertest;  2   3 import java.util.ArrayList;  4 import java.util.List;  5   6 import android.app.Activity;  7 import android.os.Bundle;  8 import android.support.v4.view.ViewPager;  9 import android.support.v4.view.ViewPager.OnPageChangeListener; 10 import android.view.View; 11 import android.view.View.OnClickListener; 12 import android.widget.Button; 13 import android.widget.ImageView; 14 import android.widget.LinearLayout; 15 import android.widget.Toast; 16  17 public class MainActivity extends Activity implements OnPageChangeListener,OnClickListener{ 18      19     PRivate ViewPager viewPager; 20     private List<View> viewList; 21     //private int images[]={R.drawable.v1,R.drawable.v2,R.drawable.v3,R.drawable.v4};//導航圖片資源 22     private View view1, view2, view3, view4; 23     private ImageView points[];//存放小圓圈數(shù)組  24      25     private int currentIndex=0;//當前頁面,默認首頁 26      27     private Button startButton; 28      29  30     @Override 31     protected void onCreate(Bundle savedInstanceState) { 32         super.onCreate(savedInstanceState); 33         setContentView(R.layout.activity_main); 34         initViewPager();//初始化ViewPager對象 35         initPoint();//初始化導航小圓點 36     } 37  38     private void initPoint() { 39         LinearLayout  linearLayout=(LinearLayout) findViewById(R.id.ll); 40         points=new ImageView[4]; 41         for(int i=0;i<points.length;i++){ 42             points[i]=(ImageView) linearLayout.getChildAt(i);//遍歷LinearLayout下的所有ImageView子節(jié)點 43             points[i].setEnabled(true);//設(shè)置當前狀態(tài)為允許(可點,灰色) 44             //設(shè)置點擊監(jiān)聽 45             points[i].setOnClickListener(this); 46              47             //額外設(shè)置一個標識符,以便點擊小圓點時跳轉(zhuǎn)對應(yīng)頁面 48             points[i].setTag(i);//標識符與圓點順序一致 49         } 50          51         currentIndex=0; 52         points[currentIndex].setEnabled(false);//設(shè)置首頁為當前頁(小點著色,藍色) 53          54          55          56     } 57  58     private void initViewPager() { 59         viewPager=(ViewPager) findViewById(R.id.viewpager);//取得ViewPager實例 60         viewList=new ArrayList<View>();//實例化list集合 61          62 /*        用代碼的動態(tài)添加View 63         //添加對應(yīng)的view進入集合(數(shù)據(jù)源) 64         for(int i=0;i<images.length;i++){ 65             ImageView imageView=new ImageView(MainActivity.this); 66             imageView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); 67             imageView.setScaleType(ScaleType.FIT_XY);//設(shè)置縮放樣式 68             imageView.setImageResource(images[i]); 69             viewList.add(imageView); 70         } 71 */ 72          73         //用xml靜態(tài)添加view 74         view1=View.inflate(MainActivity.this, R.layout.view1, null); 75         view2=View.inflate(MainActivity.this, R.layout.view2, null); 76         view3=View.inflate(MainActivity.this, R.layout.view3, null); 77         view4=View.inflate(MainActivity.this, R.layout.view4, null); 78         viewList.add(view1); 79         viewList.add(view2); 80         viewList.add(view3); 81         viewList.add(view4); 82           83  84          85         //設(shè)置適配器 86         ImageAdapter adapter=new ImageAdapter(viewList); 87          88         //綁定適配器 89         viewPager.setAdapter(adapter); 90          91         //設(shè)置頁卡切換監(jiān)聽 92         viewPager.setOnPageChangeListener(this); 93          94     } 95  96     @Override 97     public void onPageScrollStateChanged(int arg0) { 98          99     }100 101     @Override102     public void onPageScrolled(int arg0, float arg1, int arg2) {103         104     }105 106     @Override107     public void onPageSelected(int position ) {//當前頁卡被選擇時,position為當前頁數(shù)108         109         if(position==3){//由于進入微信這個按鈕在第4個頁面(view)才會出現(xiàn),如果一開始就加載這個按鈕監(jiān)聽,就導致空指針異常110                 startButton=(Button) findViewById(R.id.startbutton);111                 startButton.setOnClickListener(new OnClickListener() {//匿名內(nèi)部類,區(qū)分小圓圈的點擊事件    112                     113                 @Override114                 public void onClick(View v) {115                     Toast.makeText(MainActivity.this, "歡迎進入微信世界", Toast.LENGTH_SHORT).show();116                 }117             });118         }119         points[position].setEnabled(false);//不可點120         points[currentIndex].setEnabled(true);//恢復之前頁面狀態(tài)121         currentIndex=position;122         123     }124 125     @Override126     public void onClick(View v) {127         //利用剛設(shè)置的標識符跳轉(zhuǎn)頁面128         //Log.i("tuzi",v.getTag()+"");129         viewPager.setCurrentItem((int) v.getTag());130         131     }132 133 }

ImageAdapter.java(適配器類)

 1 package com.example.wx_viewpagertest; 2  3 import java.util.List; 4  5 import android.support.v4.view.PagerAdapter; 6 import android.view.View; 7 import android.view.ViewGroup; 8  9 public class ImageAdapter extends PagerAdapter {10     private List<View> list;11 12     public ImageAdapter(List<View> list) {// 利用構(gòu)造器接收list集合參數(shù)13         this.list = list;14     }15 16     @Override17     public int getCount() {// 返回頁卡數(shù)量18         if (list.size() != 0) {19             return list.size();20         }21         return 0;22     }23 24     @Override25     public boolean isViewFromObject(View arg0, Object arg1) {//判斷是否為view對象26         return arg0==arg1;//官方demo給出的建議寫法27     }28     29     @Override30     public Object instantiateItem(ViewGroup container, int position) {//實例化一個頁卡,view對象存放在ViewGroup里31         container.addView(list.get(position));32         return list.get(position);33     }34     35     @Override36     public void destroyItem(ViewGroup container, int position, Object object) {//銷毀一個頁卡37         container.removeView(list.get(position));38     }39 40 }

XML布局文件這里就不都貼出來了,就是簡簡單單的設(shè)置圖片,文字按鈕等

只貼其中比較特別的view:

主界面xml(activity_main.xml):

 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     tools:context="com.example.wx_viewpagertest.MainActivity" > 6  7     <android.support.v4.view.ViewPager 8         android:id="@+id/viewpager" 9         android:layout_width="fill_parent"10         android:layout_height="fill_parent" />11 12     <LinearLayout13         android:id="@+id/ll"14         android:layout_width="wrap_content"15         android:layout_height="wrap_content"16         android:layout_alignParentBottom="true"17         android:layout_centerHorizontal="true"18         android:layout_marginBottom="20dp"19         android:orientation="horizontal" >20 21         <ImageView22             android:id="@+id/iv1"23             android:layout_width="wrap_content"24             android:layout_height="wrap_content"25             android:layout_gravity="center_vertical"26             android:clickable="true"27             android:padding="25dp"28             android:src="@drawable/point_selector" />29 30         <ImageView31             android:id="@+id/iv2"32             android:layout_width="wrap_content"33             android:layout_height="wrap_content"34             android:layout_gravity="center_vertical"35             android:clickable="true"36             android:padding="25dp"37             android:src="@drawable/point_selector" />38 39         <ImageView40             android:id="@+id/iv3"41             android:layout_width="wrap_content"42             android:layout_height="wrap_content"43             android:layout_gravity="center_vertical"44             android:clickable="true"45             android:padding="25dp"46             android:src="@drawable/point_selector" />47 48         <ImageView49             android:id="@+id/iv4"50             android:layout_width="wrap_content"51             android:layout_height="wrap_content"52             android:layout_gravity="center_vertical"53             android:clickable="true"54             android:padding="25dp"55             android:src="@drawable/point_selector" />56     </LinearLayout>57 58 </RelativeLayout>

最后一個頁面帶進入按鈕的xml(view4.xml):

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3     android:layout_width="fill_parent" 4     android:layout_height="fill_parent" 5     android:background="@drawable/v4" 6     android:orientation="vertical" > 7  8     <TextView 9         android:id="@+id/starttext"10         android:layout_width="fill_parent"11         android:layout_height="wrap_content"12         android:layout_alignParentTop="true"13         android:layout_centerHorizontal="true"14         android:gravity="center"15         android:layout_marginTop="80dp"16         android:text="微信,是一種生活方式"17         android:textColor="@android:color/white"18         android:textSize="20dp" />19 20     <Button21         android:id="@+id/startbutton"22         android:layout_width="wrap_content"23         android:layout_height="wrap_content"24         android:layout_alignParentBottom="true"25         android:layout_centerHorizontal="true"26         android:layout_marginBottom="80dp"27         android:background="@drawable/startbutton_selector"28         android:text="@string/start"29         android:textColor="@android:color/white"30         android:textSize="18dp" />31     32 33 34 </RelativeLayout>

這里還有個選擇器,自定義小圓圈和Button按鈕樣式:

小圓圈:

 1 <?xml version="1.0" encoding="utf-8"?> 2 <selector xmlns:android="http://schemas.android.com/apk/res/android" > 3      4     <item  5         android:state_enabled="true" android:drawable="@drawable/v_point_nor" 6         ></item> 7      8     <item  9          android:state_enabled="false" android:drawable="@drawable/v_point_pre"10         ></item>11 12 </selector>

自定義按鈕:

1 <?xml version="1.0" encoding="utf-8"?>2 <selector xmlns:android="http://schemas.android.com/apk/res/android">3     <item android:state_enabled="true" android:state_pressed="true"4         android:drawable="@drawable/v_btn_pressed" />    5     <item android:state_enabled="true" android:drawable="@drawable/v_btn_nor" />  6 </selector>

好了,核心代碼都給出了,注釋已經(jīng)很業(yè)界良心了~ See you!

作者:Balla_兔子出處:http://m.survivalescaperooms.com/lichenwei/本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。正在看本人博客的這位童鞋,我看你氣度不凡,談吐間隱隱有王者之氣,日后必有一番作為!旁邊有“推薦”二字,你就順手把它點了吧,相得準,我分文不收;相不準,你也好回來找我!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 广河县| 保康县| 延长县| 巴中市| 常宁市| 丰城市| 樟树市| 台州市| 内黄县| 大田县| 赫章县| 区。| 吴旗县| 罗平县| 东阿县| 南充市| 黔西县| 黄陵县| 海晏县| 八宿县| 区。| 确山县| 金阳县| 社会| 长垣县| 云浮市| 乐昌市| 红安县| 昌黎县| 巍山| 全南县| 河北省| 什邡市| 花垣县| 柘荣县| 新兴县| 达州市| 临洮县| 大埔县| 清苑县| 滕州市|