此文章僅作為自己的筆記所用绘趋。
若有同仁感興趣閱讀炒事,發(fā)現(xiàn)錯(cuò)誤难礼,還望指出娃圆,一起進(jìn)步。
本文涵蓋了三塊內(nèi)容:1.viewpager的基本使用蛾茉;2.viewpager與fragment(碎片)的結(jié)合使用讼呢;3.viewpager的動(dòng)畫使用。
一谦炬、ViewPager的基本使用
1).首先悦屏,要使用viewPager需要在布局文件.xml中添加該組件<android.support.v4.view.ViewPager>,如下:
2).建立三個(gè)layout作為滑動(dòng)要顯示的內(nèi)容,如下只給出一個(gè)代碼:
3).要使用普通的ViewPager,必須要為Activity中findViewById找到的viewPager組件設(shè)置一個(gè)Adapter键思,這個(gè)和RecyclerView础爬、ListView是很相似的『鹆郏可以定義一個(gè)類繼承自PagerAdapter看蚜,這個(gè)類需要實(shí)現(xiàn)四個(gè)方法,分別為:
instantiateItem(ViewGroup container, intposition):添加到容器赔桌,初始化
destroyItem(ViewGroup container, intposition,Object object):從容器移除
getCount():返回視圖個(gè)數(shù)
isViewFromObject(View view,Object object):是否匹配(這個(gè)有點(diǎn)難解釋供炎,我不太能表述清楚)
而我通常是將他們封裝成一個(gè)父類,從而避免多次調(diào)用的時(shí)候返回去寫一些沒有意義的代碼疾党。同時(shí)碱茁,有的viewpager需要顯示tab或者title,這就可以在此類中選擇是否要實(shí)現(xiàn)相應(yīng)的方法仿贬。那么我寫的父類如下:
這里我寫了一個(gè)抽象方法纽竣,也就是繼承的子類必須實(shí)現(xiàn)這個(gè)方法,為的是將參數(shù)初始化。
繼承的子類如下:
而在Activity中的使用就比較簡(jiǎn)單了:
接下來我們將添加title和tab進(jìn)去:
如所畫的矩形框蜓氨,是添加的tab和title的代碼聋袋。
2).在剛才要實(shí)現(xiàn)的子類中添加一個(gè)構(gòu)造方法,用來傳入顯示的title/tab的文字穴吹,重寫一個(gè)要顯示title/tab的方法幽勒。
最后,是在activity中的使用:
二港令、與碎片相結(jié)合使用
1)每一個(gè)碎片都應(yīng)該對(duì)應(yīng)一個(gè)Fragment的子類來初始化頁(yè)面啥容,在這里為了方便我只寫了一個(gè)Fragment來創(chuàng)建三個(gè)view。
2.Fragment與ViewPager的組合使用顷霹,Google提供了FragmentPagerAdapter與FragmentStatePagerAdapter兩個(gè)類咪惠,其中第一個(gè)適用于fragment較少的,另一個(gè)適用較多的淋淀。代碼如下:
3.Activity中的使用:
三遥昧、動(dòng)畫使用
動(dòng)畫的話,需要建立一個(gè)類朵纷,讓其實(shí)現(xiàn)ViewPager.PageTransformer接口炭臭。然后接口中重寫方法transformPager(View pager,int position)
在這里,我覺得需要說明幾個(gè)比較重要的或者說常用的參數(shù)袍辞。
1.position:這個(gè)是位置鞋仍,一般我們要關(guān)注的是兩個(gè)頁(yè)面的位置,一個(gè)是即將消失的位置搅吁,一個(gè)是即將出現(xiàn)的位置凿试。這兩個(gè)pager的位置是在[-1,1]之間(同時(shí)也就是說完整出現(xiàn)的一個(gè)動(dòng)畫的位置占滿了這之間的位置),也就是說當(dāng)位置小于-1的時(shí)候似芝,也就全部消失了那婉,大于1的時(shí)候,也就還沒出現(xiàn)党瓮。而我們的動(dòng)畫详炬,則是根據(jù)這個(gè)position來做的。
2.ScaleX與ScaleY:這兩個(gè)是表示pager頁(yè)面的大小(我是這樣理解的寞奸,有錯(cuò)的地方歡迎指正)呛谜,可以通過設(shè)置這個(gè)值來制作動(dòng)畫。
3.alpha:這個(gè)比較好理解枪萄,就是透明度
4.translationX與translationY:這個(gè)分別是在X軸與Y軸上的偏移量隐岛。