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

首頁 > 系統 > Android > 正文

Android基于ViewPager實現類似微信頁面切換效果

2019-10-22 18:10:50
字體:
來源:轉載
供稿:網友

此文,僅做為個人學習Android,記錄成長以及方便復習!

實現ViewPager實現類似微信的頁面切換,此文通過Fragment適配器實現

首先在布局文件activity_main.xml添加ViewPager

 ViewPager是頁面,PagerTabStrip和 PagerTitleStrip是設置標題的

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent">  <!--頁卡-->  <android.support.v4.view.ViewPager   android:id="@+id/view1"   android:layout_width="wrap_content"   android:layout_height="wrap_content">   <!--頁卡標題-->   <!--PagerTitleStrip和PagerTabStrip功能差不多一致,使用了PagerTitleStrip那PagerTabStrip會失效-->   <android.support.v4.view.PagerTabStrip    android:id="@+id/pagerTabStrip"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    />  </android.support.v4.view.ViewPager>  </RelativeLayout> 

接下里創建3個布局文件,給ViewPager的適配器引用

view1.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent">   <ImageView   android:id="@+id/img1"   android:layout_height="wrap_content"   android:layout_width="wrap_content"   android:background="@drawable/img1"   android:layout_marginLeft="30dp"/>  </LinearLayout> 

view2.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent">   <ImageView   android:id="@+id/img2"   android:layout_height="match_parent"   android:layout_width="match_parent"   android:background="@drawable/img2"/>  </LinearLayout> 

view3.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent">  <ImageView   android:id="@+id/img3"   android:layout_height="match_parent"   android:layout_width="match_parent"   android:background="@drawable/img3"/> </LinearLayout> 

創建3個類繼承Fragment,通過Fragment實現onCreateView方法把view.xml布局轉換成View
MyFragment1.java

package com.rui.viewpagerdemo;  import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;  /**  * Created by qqazl001 on 2018/3/26.  */  public class MyFragment1 extends Fragment{  @Nullable  @Override  public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {   //布局文件轉成View   //參數1:Fragment需要加載的布局文件   //參數2:加載layout的父ViewGroup   //參數1:是否返回父ViewGroup對象,false為不   View view = inflater.inflate(R.layout.view1,container,false);   return view;  } } 

MyFragment2.java

package com.rui.viewpagerdemo;  import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;  /**  * Created by qqazl001 on 2018/3/26.  */  public class MyFragment2 extends Fragment{  @Nullable  @Override  public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {   //布局文件轉成View   //參數1:Fragment需要加載的布局文件   //參數2:加載layout的父ViewGroup   //參數1:是否返回父ViewGroup對象,false為不   View view = inflater.inflate(R.layout.view2,container,false);   return view;  } } 

MyFragment3.java

package com.rui.viewpagerdemo;  import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;  /**  * Created by qqazl001 on 2018/3/26.  */  public class MyFragment3 extends Fragment{  @Nullable  @Override  public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {   //布局文件轉成View   //參數1:Fragment需要加載的布局文件   //參數2:加載layout的父ViewGroup   //參數1:是否返回父ViewGroup對象,false為不   View view = inflater.inflate(R.layout.view3,container,false);   return view;  } } 

創建適配器,新建類(MyAdapter),繼承FragmentPagerAdapter

package com.rui.viewpagerdemo;  import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup;  import java.util.ArrayList; import java.util.List;  /**  * Created by qqazl001 on 2018/3/26.  */  public class MyAdapter extends FragmentPagerAdapter{  List<Fragment> listFragment;  List<String> listTab = new ArrayList<String>();   public MyAdapter(FragmentManager fm,List<Fragment> listFragment,List<String>listTab) {   super(fm);   this.listFragment=listFragment;   this.listTab=listTab;  }    @Override  public CharSequence getPageTitle(int position) {   //返回標題名稱   return listTab.get(position);  }   @Override  public Fragment getItem(int position) {   //返回頁面內容   return listFragment.get(position);  }   @Override  public int getCount() {   //一共多少個頁面   return listFragment.size();  } } 

在Activity實例化組件和適配器并添加監聽,添加各種數據源等

監聽實現接口OnPageChangeListener

ViewPager,添加監聽方法 setOnPageChangeListener() 方法已經被 AS 移除了,建議使用 addOnPageChangeListener() 方法。

MainActivity.java

 

package com.rui.viewpagerdemo;  import android.annotation.SuppressLint; import android.graphics.Color; import android.support.v4.app.Fragment; import android.support.v4.view.PagerTabStrip; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Toast;  import java.util.ArrayList; import java.util.List; //調用接口監聽,并實現方法 public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{  private List<Fragment> listFragment;//聲明List,存放Fagment  private ViewPager viewPager;//聲明ViewPager  private PagerTabStrip pagerTabStrip;//聲明PagerTabStrip  private List<String> listTab;//聲明List,存放標題   @SuppressLint("ResourceType")  @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);   //實例化List   listFragment = new ArrayList<Fragment>();   //view加入list   listFragment.add(new MyFragment1());   listFragment.add(new MyFragment2());   listFragment.add(new MyFragment3());   //標題加入list   listTab = new ArrayList<String>();   listTab.add("第一頁");   listTab.add("第二頁");   listTab.add("第三頁");    //為PagerTabStrip設置屬性   pagerTabStrip = (PagerTabStrip)findViewById(R.id.pagerTabStrip);   //pagerTabStrip.setBackgroundColor(color.white); 設置背景色   pagerTabStrip.setTextColor(Color.RED); //設置標題文字顏色   pagerTabStrip.setDrawFullUnderline(false);//是否顯示一條橫線   pagerTabStrip.setTabIndicatorColor(Color.GREEN);//標題下的短粗線顏色    //實例化適配器   MyAdapter myAdapter = new MyAdapter(getSupportFragmentManager(),listFragment,listTab);   //實例化ViewPager   viewPager = (ViewPager) findViewById(R.id.view1);   //為viewPager加載適配器   viewPager.setAdapter(myAdapter);   //加載監聽事件   viewPager.addOnPageChangeListener(this);  }    @Override  public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {   // position-點擊滑動的界面的位置    // positionOffset-點擊頁面占整個屏幕的百分比    // positionOffsetPixels-屏幕像素的位置  }   @Override  public void onPageSelected(int position) {   //滑動到第幾頁   Toast.makeText(MainActivity.this,"第"+(position+1)+"頁",Toast.LENGTH_SHORT).show();  }   @Override  public void onPageScrollStateChanged(int state) {   //state:滑動狀態    //當頁面停止的時候該參數為0,頁面開始滑動的時候變成了1,    //當手指從屏幕上抬起變為了2(無論頁面是否從1跳到了2),當頁面靜止后又變成了0    //只在0,1,2三個數字之間切換.  } } 

PS:以上很多都使用了 android.support.v4.* 這個包下的類,是為了向下兼容

ViewPager有三個適配器,適配不同的數據源。

1、繼承自PagerAdapter的適配器適配List<View>的數據

2、繼承自FragmentAdapter的適配器適配List<Fragment>的數據

3、繼承自FragmentStateAdapter的適配器適配List<Fragment>的數據

其中后兩種的區別是:2沒有創建和銷毀的過程,3有

Android,ViewPager,頁面切換

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金昌市| 安多县| 临湘市| 文山县| 当阳市| 昭苏县| 壤塘县| 泽普县| 遂溪县| 丹凤县| 滨海县| 建瓯市| 南开区| 张家界市| 仲巴县| 阳谷县| 山西省| 崇信县| 岗巴县| 咸丰县| 陇西县| 崇明县| 依兰县| 南康市| 博兴县| 尤溪县| 海城市| 育儿| 拉萨市| 汝南县| 泰来县| 亚东县| 开封县| 南皮县| 于田县| 阿图什市| 固原市| 鹤庆县| 竹山县| 锦州市| 横山县|