首页 > 其他分享 >Android 《ViewPager 实现引导页》

Android 《ViewPager 实现引导页》

时间:2024-02-20 16:23:08浏览次数:25  
标签:引导 launch ViewPager ViewGroup import Android btn android view

布局文件

activity_launch_simple.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"
    android:orientation="vertical"
    tools:context=".LaunchSimpleActivity">
<androidx.viewpager.widget.ViewPager
    android:id="@+id/vg_launch"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
</LinearLayout>

launch_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:ignore="MissingDefaultResource">
    <ImageView
        android:id="@+id/iv_launch_img"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        />

    <RadioGroup
        android:id="@+id/rg_launch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="50dp"
        android:orientation="horizontal"
        >
    </RadioGroup>

    <Button
        android:id="@+id/btn_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="开始美好生活"
        android:textColor="#ff3300"
        android:textSize="22sp"
        android:visibility="gone"
        />
</RelativeLayout>

Activity

LaunchSimpleActivity.java

package com.galanz.app_ui_advance;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import java.util.ArrayList;
import java.util.List;

public class LaunchSimpleActivity extends AppCompatActivity {
    //引导页图片数组
    private int[] launchImageArray = {
            R.drawable.guide_bg1,
            R.drawable.guide_bg2,
            R.drawable.guide_bg3,
            R.drawable.guide_bg4
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_launch_simple);
        //隐藏actionBar
        ActionBar supportActionBar = getSupportActionBar();
        supportActionBar.hide();

        ViewPager vg_launch = findViewById(R.id.vg_launch);

        vg_launch.setAdapter(new LauncherPageAdapter(this, launchImageArray));
    }
}

class LauncherPageAdapter extends PagerAdapter {

    private Context ctx;
    private int[] imageArray;
    private List<View> views = new ArrayList<>();


    public LauncherPageAdapter(Context ctx, int[] imageArray) {
        this.ctx = ctx;
        this.imageArray = imageArray;

        ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        for (int i = 0; i < imageArray.length; i++) {
            //构造View
            View view = LayoutInflater.from(ctx).inflate(R.layout.launch_item, null);
            ImageView iv_launch_img = view.findViewById(R.id.iv_launch_img);
            RadioGroup rg_launch = view.findViewById(R.id.rg_launch);
            Button btn_start = view.findViewById(R.id.btn_start);
            iv_launch_img.setImageResource(imageArray[i]);
            //分配一组radioButton
            for (int j = 0; j < imageArray.length; j++) {
                RadioButton btn = new RadioButton(ctx);
                btn.setLayoutParams(layoutParams);
                rg_launch.addView(btn);
                if (i == j) {
                    btn.setChecked(true);

                } else {
                    btn.setClickable(false);
                }
            }
            //是否显示按钮
            if (i == (imageArray.length - 1)) {
                btn_start.setVisibility(ViewGroup.VISIBLE);
                btn_start.setOnClickListener(v -> {
                    Intent intent = new Intent(ctx, MainActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    LaunchSimpleActivity act = (LaunchSimpleActivity) ctx;
                    act.startActivity(intent);
                });
            } else {
                btn_start.setVisibility(ViewGroup.GONE);
            }
            views.add(view);
        }

    }

    @Override
    public int getCount() {
        return views.size();
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        View view = views.get(position);
        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView(views.get(position));
    }
}

实现效果

image

标签:引导,launch,ViewPager,ViewGroup,import,Android,btn,android,view
From: https://www.cnblogs.com/paylove/p/18023373

相关文章

  • Android 《ViewPagerStrip》简单应用
    布局文件activity_pager_tab_strip.xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"......
  • Android命令-lshal
    一、lahal--help翻译/#lshal--helplshal:列出并调试HIDLHAL。(对于AIDLHAL,请参阅“dumpsys”)commands:list列出HIDLHAL。debug调试指定的HIDLHAL。help打印帮助消息。wait如果HIDLHAL尚未启动,请等待其启动。如果未指定命令,则默认为“l......
  • Android 《ViewPager》简单应用
    布局文件<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://sche......
  • Kotlin学习, 新手向,变量总汇,基于《第一行代码Android(第三版)》
    作者做的思维导图变量val和var区别valvalue不可变变量varvariable可变变量变量的自动类型推导(弱)vala=10;print("a="+a);变量的显式声明(强)vala:Int=10;数据类型注意和java不同,这些都是对象数据类型,大写开头:IntShortLongFloatDoubleB......
  • 第一行代码 Android(第3版)PDF下载
    《第一行代码Android第3版》被Android开发者誉为“Android学习第一书”。全书系统全面、循序渐进地介绍了Android软件开发的必备知识、经验和技巧。《第一行代码Android第3版》基于Android10.0对第2版进行了全面更新,不仅将所有知识点都在Android10.0系统上进行了重新适配,同......
  • Android家庭记账本开发第四天:SQLite数据库操作
    SQlite数据库是一个轻量级的数据库,被用在嵌入式设备上,2019年6月还在流行的两大移动终端操作系统,Android和ios都支持这款数据库。AndroidSDK中有一个包android.database.sqlite,其中专门对SQLite数据库进行了封装,并提供了一套供android使用的API。SQLiteOpenHelper 类包含一组用......
  • 踩坑小计-Android Flutter应用设置沉浸式状态栏
    之前写过一篇关于设置Flutter页面沉浸式状态栏的文章。https://www.cnblogs.com/mrhan9941/p/16482604.html主要是基于Flutterboost的原生Android项目的,那时候是在原生Android项目嵌入了FlutterModule。项目重构后已经改为纯Flutter项目,确发现一个小问题,沿用之前的设置沉浸式状......
  • Android家庭记账本开发第三天:MainActivity主界面逻辑文件
    昨天讲了主界面的xml文件的布局,这里讲一下对应的主界面的Java文件,首先上代码:1packagecom.example.myapplication3;23importandroid.annotation.SuppressLint;4importandroid.content.Intent;5importandroid.database.Cursor;6importandroid.databas......
  • macOS Sonoma 14.3.1 (23D60) 正式版 Boot ISO 原版可引导镜像下载
    macOSSonoma14.3.1(23D60)正式版BootISO原版可引导镜像下载本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。另外也支持在Windows和Linux中创建可引导介质。请访问原文链接:https://sysin.org/bl......
  • Android家庭记账本开发第二天:activity_main布局文件
    本次开发记录是在开发完成之后记录的,所以能写几篇我也不知道,可能没有十篇,将这次的开发记录作为一次知识点复习的机会。开发完成之后的目录如下安卓开发相较于之前进行的Javaweb开发难度要高上不少,因为之前的都是通过tomcat服务器去运行,我们只需要将对应的页面完善好就行,但是安......