您好,登錄后才能下訂單哦!
本篇內容介紹了“Android如何實現自動變換大小的組件ViewPager2”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
ViewPager2是一個翻頁視圖組件
ViewPager2能做什么
支持垂直方向的滑動且實現極其簡單。
完全支持RecyclerView的相關配置功能。
支持多個PageTransformer。
支持DiffUtil,局部數據刷新和Item動畫。
支持模擬用戶滑動與禁止用戶操作。
因為ViewPager2是基于RecyclerView的,所以在使用上與RecyclerView的使用基本一致
ViewPager2常用的API
1. setAdapter() 為viewpager2設置是配置
2. setOrientation() 設置視圖翻頁的方向,可以設置垂直方向,也可以設置水平方向。
3. setPageTransformer() 設置翻頁的動畫
舉個簡單的例子,adapter部分的代碼省略了
第一步: activity_main.xml
// 第一步: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <androidx.viewpager2.widget.ViewPager2 android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/view_pager"/> </LinearLayout>
第二步:創建適配器的視圖
// 第二步:創建適配器的視圖 <!-- ViewPager2要求每頁的寬高都必須是match_parent --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/iv_pic" android:layout_width="match_parent" android:layout_height="360dp" android:scaleType="fitCenter" /> <TextView android:id="@+id/tv_desc" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
第三步: 創建適配器adapter
// 第三步:創建適配器adapter public class viewpagerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { // 聲明一個上下文對象 private Context mContext; // 聲明一個商品列表,用于渲染adapter private List<GoodsInfo> mGoodsList = new ArrayList<GoodsInfo>(); // 函數構造 public viewpagerAdapter(Context context, List<GoodsInfo> goodsList) { mContext = context; mGoodsList = goodsList; } // 創建列表項的視圖持有者 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup vg, int viewType) { // 根據布局文件item_mobile.xml生成視圖對象 View v = LayoutInflater.from(mContext).inflate(R.layout.item_mobile, vg, false); return new ItemHolder(v); } // 綁定列表項的視圖持有者 public void onBindViewHolder(RecyclerView.ViewHolder vh, final int position) { ItemHolder holder = (ItemHolder) vh; holder.iv_pic.setImageResource(mGoodsList.get(position).pic); holder.tv_desc.setText(mGoodsList.get(position).desc); } // 定義列表項的視圖持有者 public class ItemHolder extends RecyclerView.ViewHolder { public ImageView iv_pic; // 聲明列表項圖標的圖像視圖 public TextView tv_desc; // 聲明列表項描述的文本視圖 public ItemHolder(View v) { super(v); iv_pic = v.findViewById(R.id.iv_pic); tv_desc = v.findViewById(R.id.tv_desc); } } }
第四步:書寫MainAcvitivity.java,調用ViewPager的API
//第四步:書寫MainAcvitivity.java,調用ViewPager的API public class MainActivity extends AppCompatActivity { private List<GoodsInfo> viewPagerList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); // 從布局文件中獲取翻頁視圖 ViewPager2 viewPager2 = findViewById(R.id.view_pager); // 構建適配器 viewpagerAdapter vpa = new viewpagerAdapter(viewPagerList); // 設置翻頁視圖的排列方向為水平方向 viewPager2.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL); // 為翻頁視圖添加適配器 viewPager2.setAdapter(vpa); } private void initData(){ GoodsInfo g1 = new GoodsInfo("123", R.drawable.cloudy); viewPagerList.add(g1); GoodsInfo g2 = new GoodsInfo("456", R.drawable.moon); viewPagerList.add(g2); GoodsInfo g3 = new GoodsInfo("789", R.drawable.sunny); viewPagerList.add(g3); } }
有沒有發現,這個和recycleView的寫法一摸一樣。
第一步:activity_main.xml視圖
// 第一步:activity_main.xml視圖 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <androidx.viewpager2.widget.ViewPager2 android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/view_pager"/> </LinearLayout>
第二步:創建fragment所需要的視圖fragment_blank.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout 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:background="@color/white" tools:context=".BlankFragment"> <!-- TODO: Update blank fragment layout --> <TextView android:id="@+id/mTextView" android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello_blank_fragment" android:textSize="36sp" android:gravity="center"/> </FrameLayout>
第三步:fragment所需的代碼
public class BlankFragment extends Fragment { private static final String ARG_PARAM1 = "param1"; String mTextString = "xxx"; View rootView; public static BlankFragment newInstance(String param1) { BlankFragment fragment = new BlankFragment(); Bundle args = new Bundle(); args.putString(ARG_PARAM1, param1); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mTextString = getArguments().getString(ARG_PARAM1); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if(rootView == null) { rootView = inflater.inflate(R.layout.fragment_blank, container, false); } initView(); return rootView; } private void initView() { TextView textView = rootView.findViewById(R.id.mTextView); textView.setText(mTextString); } }
第四步:創建承載fragment所需要的適配器
public class MyFragmentAdapter extends FragmentStateAdapter { List<Fragment> fragments = new ArrayList<>(); public MyFragmentAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle, List<Fragment> fragments) { super(fragmentManager, lifecycle); this.fragments = fragments; } @NonNull @Override public Fragment createFragment(int position) { return fragments.get(position); } @Override public int getItemCount() { return fragments.size(); } }
第五步:書寫MainAcvitivity.java,調用ViewPager的API
public class MainActivity extends AppCompatActivity { ViewPager2 viewPager2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initPage(); } private void initPage() { List<Fragment> fragments = new ArrayList<>(); fragments.add(BlankFragment.newInstance("fragment1")); fragments.add(BlankFragment.newInstance("fragment2")); fragments.add(BlankFragment.newInstance("fragment3")); fragments.add(BlankFragment.newInstance("fragment4")); viewPager2 = findViewById(R.id.myViewPager); viewPager2.setAdapter(new MyFragmentAdapter(getSupportFragmentManager(), getLifecycle(),fragments)); } }
代碼簡寫,只寫相關的部分
// activity_main.xml 寫上用到的兩個組件TabLayout與ViewPager2 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <com.google.android.material.tabs.TabLayout android:id="@+id/mTabLayout" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.1"> <com.google.android.material.tabs.TabItem android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Monday" /> <com.google.android.material.tabs.TabItem android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tuesday" /> <com.google.android.material.tabs.TabItem android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Wednesday" /> </com.google.android.material.tabs.TabLayout> <androidx.viewpager2.widget.ViewPager2 android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/myViewPager" android:background="@color/purple_500" > </androidx.viewpager2.widget.ViewPager2> </LinearLayout>
public class MainActivity extends AppCompatActivity { ViewPager2 viewPager2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initPage(); } private void initPage() { List<Fragment> fragments = new ArrayList<>(); fragments.add(BlankFragment.newInstance("fragment1")); fragments.add(BlankFragment.newInstance("fragment2")); fragments.add(BlankFragment.newInstance("fragment3")); fragments.add(BlankFragment.newInstance("fragment4")); viewPager2 = findViewById(R.id.myViewPager); viewPager2.setAdapter(new MyFragmentAdapter(getSupportFragmentManager(), getLifecycle(),fragments)); //綁定使用 new TabLayoutMediator(findViewById(R.id.mTabLayout),viewPager2,new TabLayoutMediator.TabConfigurationStrategy(){ @Override public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) { switch (position){ case 0: tab.setText("1"); break; case 1: tab.setText("2"); break; case 2: tab.setText("3"); break; } } }).attach(); } }
“Android如何實現自動變換大小的組件ViewPager2”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。