基于Viewpager2实现登录注册引导页面

作者:_jiaaang 时间:2023-06-16 11:04:10 

本文实例为大家分享了Viewpager2实现登录注册引导页面的具体代码,供大家参考,具体内容如下

介绍

屏幕滑动是两个完整屏幕之间的切换,在设置向导或幻灯片等界面中很常见

实现图(图片来源于网络):

基于Viewpager2实现登录注册引导页面

例子

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://blog.csdn.net/weixin_44758662/article/details/108912726

标签:Viewpager2,登录,注册
0
投稿

猜你喜欢

  • Flutter WillPopScope拦截返回事件原理示例详解

    2023-07-19 12:53:35
  • WPF中ImageBrush常用方式介绍

    2022-02-26 09:45:30
  • SpringBoot全局异常与数据校验的方法

    2023-12-11 10:46:06
  • android 实现在照片上绘制涂鸦的方法

    2023-09-17 13:24:49
  • springmvc实现简单的拦截器

    2022-02-27 05:13:39
  • 详解Java匿名内部类

    2023-04-30 14:51:28
  • Android 操作excel功能实例代码

    2021-07-02 23:48:23
  • 详解Spring框架下向异步线程传递HttpServletRequest参数的坑

    2021-05-31 04:45:21
  • Java实现的两个线程同时运行案例

    2023-05-14 09:10:40
  • java反射之通过反射了解集合泛型的本质(详解)

    2023-02-04 03:10:25
  • Android自定义带圆点的半圆形进度条

    2023-08-05 07:47:15
  • Springboot+Poi导入Excel表格实现过程详解

    2023-06-07 04:26:03
  • Java线程安全的计数器简单实现代码示例

    2023-11-09 15:41:57
  • IDEA如何自动生成serialVersionUID的设置

    2023-08-09 04:00:33
  • 深入了解Java设计模式之策略模式

    2021-06-24 22:45:56
  • C#使用Process类调用外部程序分解

    2022-01-07 16:34:11
  • RxJava中多种场景的实现总结

    2023-01-09 05:39:02
  • Java 替换字符串中的回车换行符的方法

    2022-10-05 10:55:22
  • SpringMVC请求数据详解讲解

    2021-09-13 08:56:56
  • Mybatis resultMap标签继承、复用、嵌套方式

    2023-06-27 13:27:43
  • asp之家 软件编程 m.aspxhome.com