Viewpager2
- 介紹
- 例子
- 總結
Blog如有不對,敬請斧正
喜歡Android的可以關注我,日常更新Android干貨
介紹
螢屏滑動是兩個完整螢屏之間的切換,在設定向導或幻燈片等界面中很常見
實作圖(圖片來源于網路):

例子
1、創建視圖
我這里只創建了3個XML
fragment0.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/p0"
/>
</LinearLayout>
fragment1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/p1"
/>
</LinearLayout>
fragment2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/p2"
/>
</LinearLayout>
2、創建 Fragment
根據構造方法傳進來的 int i;回傳不同的視圖(i是等下用到的FragmentStateAdapter配接器中傳進去的)
package com.example.xianyu;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
public class mFragment extends Fragment {
int i = 0;
mFragment(int i){
this.i = i;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = null;
switch (i){
case 0: {
view = inflater.inflate(R.layout.fragment0, container, false);
break;
}
case 1: {
view = inflater.inflate(R.layout.frament1, container, false);
break;
}
case 2: {
view = inflater.inflate(R.layout.fragment2, container, false);
break;
}
}
return view;
}
}
3、主Activity,并創建自定義配接器繼承自FragmentStateAdapter
activity_screen_slide.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- activity_screen_slide.xml -->
<androidx.viewpager2.widget.ViewPager2
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
homeActivity
package com.example.xianyu;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;
public class homeActivity extends FragmentActivity {
//要顯示的頁數
private static final int NUM_PAGES = 3;
private ViewPager2 viewPager2;
// 配接器,為ViewPager2提供頁面
private FragmentStateAdapter pagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_slide);
viewPager2 = findViewById(R.id.pager);
pagerAdapter = new ScreenSlidePagerAdapter(this);
viewPager2.setAdapter(pagerAdapter);
}
@Override
public void onBackPressed() {
if (viewPager2.getCurrentItem() == 0) {
super.onBackPressed();
} else {
viewPager2.setCurrentItem(viewPager2.getCurrentItem() - 1);
}
}
//自定義的類,繼承自FragmentStateAdapter配接器
private class ScreenSlidePagerAdapter extends FragmentStateAdapter {
public ScreenSlidePagerAdapter(FragmentActivity fa) {
super(fa);
}
//主要是createFragment這個方法
@Override
public Fragment createFragment(int position) {
return new mFragment(position);
}
@Override
public int getItemCount() {
return NUM_PAGES;
}
}
}
總結
非常實用,快快收藏叭!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/157318.html
標籤:其他
上一篇:Flutter 解答StackOverflow問題flutter scrollable list below rendered image
