viewpager+fragment学习笔记
生活随笔
收集整理的這篇文章主要介紹了
viewpager+fragment学习笔记
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
有暇,總結(jié)一下viewpager+fragment的使用。
先來(lái)看看效果圖:
有三個(gè)標(biāo)題,三個(gè)fragment,滑動(dòng)時(shí)標(biāo)題的顏色會(huì)隨著變化。
MainActivity.java
public class MainActivity extends FragmentActivity {private ViewPager vp;private Fragment f1, f2, f3;//把所有的Fragment裝到一個(gè)List中private List<Fragment> fs;private FragmentPagerAdapter fpa;private TextView tv1, tv2, tv3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);vp = (ViewPager) this.findViewById(R.id.vp1);initView();//一個(gè)適配器,里邊存的都是Fragmentfpa = new FragmentPagerAdapter(getSupportFragmentManager()) {@Overridepublic int getCount() {return fs.size();}@Overridepublic Fragment getItem(int arg0) {return fs.get(arg0);}};vp.setAdapter(fpa);/*** 三個(gè)方法的執(zhí)行順序?yàn)?#xff1a;用手指拖動(dòng)翻頁(yè)時(shí),最先執(zhí)行一遍onPageScrollStateChanged(1),* 然后不斷執(zhí)行onPageScrolled,放手指的時(shí)候,直接立即執(zhí)行一次onPageScrollStateChanged(2),* 然后立即執(zhí)行一次onPageSelected,然后再不斷執(zhí)行onPageScrolled,* 最后執(zhí)行一次onPageScrollStateChanged(0)。*/vp.setOnPageChangeListener(new OnPageChangeListener() {/*** position代表哪個(gè)頁(yè)面被選中*/@Overridepublic void onPageSelected(int position) {switch (position) {case 0:changeTitleBackground(0);break;case 1:changeTitleBackground(1);break;case 2:changeTitleBackground(2);break;default:break;}Log.i("lenve", "onPageSelected"+position);}/*** 有三個(gè)參數(shù),第一個(gè)position,這個(gè)參數(shù)要特別注意一下。當(dāng)用手指滑動(dòng)時(shí),如果手指按在頁(yè)面上不動(dòng),* position和當(dāng)前頁(yè)面index是一致的* 如果手指向左拖動(dòng)(相應(yīng)頁(yè)面向右翻動(dòng)),這時(shí)候position大部分時(shí)間和當(dāng)前頁(yè)面是一致的,* 只有翻頁(yè)成功的情況下最后一次調(diào)用才會(huì)變?yōu)槟繕?biāo)頁(yè)面;如果手指向右拖動(dòng)(相應(yīng)頁(yè)面向左翻動(dòng)),* 這時(shí)候position大部分時(shí)間和目標(biāo)頁(yè)面是一致的,只有翻頁(yè)不成功的情況下最后一次調(diào)用才會(huì)變?yōu)樵?yè)面。* 當(dāng)直接設(shè)置setCurrentItem翻頁(yè)時(shí),如果是相鄰的情況(比如現(xiàn)在是第二個(gè)頁(yè)面,跳到第一或者第三個(gè)頁(yè)面),* 如果頁(yè)面向右翻動(dòng),大部分時(shí)間是和當(dāng)前頁(yè)面是一致的,只有最后才變成目標(biāo)頁(yè)面;如果向左翻動(dòng),position和目標(biāo)頁(yè)面是一致的。* 這和用手指拖動(dòng)頁(yè)面翻動(dòng)是基本一致的。* 如果不是相鄰的情況,比如我從第一個(gè)頁(yè)面跳到第三個(gè)頁(yè)面,position先是0,然后逐步變成1,* 然后逐步變成2;我從第三個(gè)頁(yè)面跳到第一個(gè)頁(yè)面, position先是1,然后逐步變成0,并沒(méi)有出現(xiàn)為2的情況。* positionOffset是當(dāng)前頁(yè)面滑動(dòng)比例,如果頁(yè)面向右翻動(dòng),這個(gè)值不斷變大,最后在趨近1的情況后突變?yōu)?。* 如果頁(yè)面向左翻動(dòng),這個(gè)值不斷變小,最后變?yōu)?。* positionOffsetPixels是當(dāng)前頁(yè)面滑動(dòng)像素,變化情況和positionOffset一致。*/// 在屏幕滾動(dòng)過(guò)程中不斷被調(diào)用@Overridepublic void onPageScrolled(int position,float positionOffset, int positionOffsetPixels) {Log.i("lenve", "onPageScrolled"+position);}/*** onPageScrollStateChanged(int state):這個(gè)方法在手指操作屏幕的時(shí)候發(fā)生變化。* 有三個(gè)值:0(END),1(PRESS) , 2(UP) 。 當(dāng)用手指滑動(dòng)翻頁(yè)時(shí),手指按下去的時(shí)候會(huì)觸發(fā)這個(gè)方法,state值為1* 手指抬起時(shí),如果發(fā)生了滑動(dòng)(即使很小),這個(gè)值會(huì)變?yōu)?,然后最后變?yōu)?* 總共執(zhí)行這個(gè)方法三次。一種特殊情況是手指按下去以后一點(diǎn)滑動(dòng)也沒(méi)有發(fā)生,這個(gè)時(shí)候只會(huì)調(diào)用這個(gè)方法兩次,state值分別是1,0 。* 當(dāng)setCurrentItem翻頁(yè)時(shí),會(huì)執(zhí)行這個(gè)方法兩次,state值分別為2 , 0 。*/@Overridepublic void onPageScrollStateChanged(int state) {Log.i("lenve", "onPageScrollStateChanged"+state);}});//設(shè)置默認(rèn)顯示頁(yè)vp.setCurrentItem(0);}private void initView() {tv1 = (TextView) this.findViewById(R.id.tv1);tv2 = (TextView) this.findViewById(R.id.tv2);tv3 = (TextView) this.findViewById(R.id.tv3);//設(shè)置tv1的默認(rèn)顏色tv1.setTextColor(Color.GREEN);fs = new ArrayList<Fragment>();f1 = new Fragment1();f2 = new Fragment2();f3 = new Fragment3();fs.add(f1);fs.add(f2);fs.add(f3);}//滑動(dòng)時(shí)修改標(biāo)題顏色private void changeTitleBackground(int i) {switch (i) {case 0:tv1.setTextColor(Color.GREEN);tv2.setTextColor(Color.GRAY);tv3.setTextColor(Color.GRAY);break;case 1:tv1.setTextColor(Color.GRAY);tv2.setTextColor(Color.GREEN);tv3.setTextColor(Color.GRAY);break;case 2:tv1.setTextColor(Color.GRAY);tv2.setTextColor(Color.GRAY);tv3.setTextColor(Color.GREEN);break;default:break;}} }注釋里邊說(shuō)的比較清楚了,再看看布局文件:
<LinearLayout 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:orientation="vertical"tools:context="com.example.viewpagertest.MainActivity" ><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextView android:id="@+id/tv1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center_horizontal"android:text="f1" /><TextView android:id="@+id/tv2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center_horizontal"android:text="f2" /><TextView android:id="@+id/tv3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center_horizontal"android:text="f3" /></LinearLayout><android.support.v4.view.ViewPager android:id="@+id/vp1"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>另外,三個(gè)fragment都是普通的fragment,這里就不貼代碼了。
本項(xiàng)目源碼下載
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。若有錯(cuò)誤地方,還望批評(píng)指正,不勝感激。
轉(zhuǎn)載于:https://www.cnblogs.com/lenve/p/4770542.html
總結(jié)
以上是生活随笔為你收集整理的viewpager+fragment学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux系统之更改默认块大小
- 下一篇: B. Quasi Binary