Androidstudio实现一个app引导页(超详细)
文章目录
- 1. 功能需求
- 2. 代码实现过程
- 1. 创建布局文件
- 2. 创建引导页的Adapter
- 3. 实现引导页Activity
- 4. 创建圆点指示器的Drawable
- 5. 创建“立即体验”按钮的圆角背景
- 2.效果图
1. 功能需求

1、需要和原型图设计稿对应的元素保持一致的样式。
2、引导页需要隐藏导航栏,有三张图片,从第一张图片可以向左滑动 到第二张图片;从第二张向左可以滑动的第三张照片,向右可以滑动 到第一张照片;从第三张照片可以向右滑动到第二张照片。
3、底部有三个小圆点,小圆点根据图片变动;显示第一张图片时,只 有第一个小圆点为红色;显示第二张图片时,只有第二个小圆点为红 色;显示第三张图片时,只有第三个小圆点为红色。
4、点击底部小圆点可以跳转到对应的图片。
5、第三张图片上面有一个圆角矩形的“立即体验”按钮。
6、点击【立即体验】按钮能切换页面至【Login】页面。
2. 代码实现过程
1. 创建布局文件
创建一个布局文件 activity_welcome.xml,用于显示引导页的内容:
<?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"><!-- ViewPager 用于显示图片 --><androidx.viewpager.widget.ViewPagerandroid:id="@+id/viewPager"android:layout_width="match_parent"android:layout_height="match_parent" /><!-- 圆点指示器 --><LinearLayoutandroid:id="@+id/dotsLayout"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:layout_marginBottom="20dp"android:orientation="horizontal" /><!-- 立即体验按钮 --><TextViewandroid:id="@+id/btnExperience"android:layout_width="200dp"android:layout_height="40dp"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:layout_marginBottom="40dp"android:background="@drawable/rounded_button"android:gravity="center"android:text="立即体验"android:textColor="@color/white"android:textSize="15sp"android:visibility="gone" />
</RelativeLayout>
2. 创建引导页的Adapter
public class WelcomePagerAdapter extends PagerAdapter {private Context context;private int[] imageResources;public WelcomePagerAdapter(Context context, int[] imageResources) {this.context = context;this.imageResources = imageResources;}@Overridepublic int getCount() {return imageResources.length;}@Overridepublic boolean isViewFromObject(View view, Object object) {return view == object;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {LayoutInflater inflater = LayoutInflater.from(context);View view = inflater.inflate(R.layout.item_welcome, container, false);ImageView imageView = view.findViewById(R.id.imageView);imageView.setImageResource(imageResources[position]);container.addView(view);return view;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}
}
对应的布局文件 item_welcome.xml:
<?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"><ImageViewandroid:id="@+id/imageView"android:layout_width="300dp"android:layout_height="400dp"android:src="@drawable/image1"android:layout_centerInParent="true" />
</RelativeLayout>
3. 实现引导页Activity
在WelcomeActivity中,设置ViewPager和圆点指示器,并处理“立即体验”按钮的点击事件:
public class WelcomeActivity extends AppCompatActivity {private ViewPager viewPager;private LinearLayout dotsLayout;private TextView btnExperience;private int[] imageResources = {R.drawable.image1, R.drawable.image2, R.drawable.image2};private ImageView[] dots;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_welcome);//初始化控件viewPager = findViewById(R.id.viewPager);dotsLayout = findViewById(R.id.dotsLayout);btnExperience = findViewById(R.id.btnExperience);// 设置ViewPager的AdapterWelcomePagerAdapter adapter = new WelcomePagerAdapter(this, imageResources);viewPager.setAdapter(adapter);// 初始化圆点指示器createDots(0);// 监听ViewPager的滑动事件viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {createDots(position);// 显示或隐藏“立即体验”按钮if (position == imageResources.length - 1) {btnExperience.setVisibility(View.VISIBLE);} else {btnExperience.setVisibility(View.GONE);}}@Overridepublic void onPageScrollStateChanged(int state) {}});// 点击“立即体验”按钮跳转到登录页面btnExperience.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "跳转到登录页面", Toast.LENGTH_SHORT).show();}});}// 创建圆点指示器private void createDots(int currentPosition) {if (dotsLayout != null) {dotsLayout.removeAllViews();}dots = new ImageView[imageResources.length];for (int i = 0; i < imageResources.length; i++) {dots[i] = new ImageView(this);if (i == currentPosition) {dots[i].setImageResource(R.drawable.dot_selected);} else {dots[i].setImageResource(R.drawable.dot_unselected);}LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);//设置原点左右之间的间距params.setMargins(14, 0, 14, 0);dotsLayout.addView(dots[i], params);// 点击圆点跳转到对应的页面final int finalI = i;dots[i].setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {viewPager.setCurrentItem(finalI);}});}}
}
4. 创建圆点指示器的Drawable
在res/drawable目录下创建两个XML文件,分别表示选中的圆点和未选中的圆点:
dot_selected.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"><solid android:color="#FF0000" /><size android:width="10dp" android:height="10dp" />
</shape>
dot_unselected.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"><solid android:color="#CCCCCC" /><size android:width="10dp" android:height="10dp" />
</shape>
5. 创建“立即体验”按钮的圆角背景
在res/drawable目录下创建一个XML文件 rounded_button.xml,用于设置按钮的圆角背景:
<shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#FF0000" /><corners android:radius="25dp" /></shape>
2.效果图

相关文章:
Androidstudio实现一个app引导页(超详细)
文章目录 1. 功能需求2. 代码实现过程1. 创建布局文件2. 创建引导页的Adapter3. 实现引导页Activity4. 创建圆点指示器的Drawable5. 创建“立即体验”按钮的圆角背景 2.效果图 1. 功能需求 1、需要和原型图设计稿对应的元素保持一致的样式。 2、引导页需要隐藏导航栏ÿ…...
[思考记录]关于AI辅助独立思考
本来是写两个反思类的记录,已经有了一些思路,并且都写了个开头。但手欠,去试着问了下AI,发现它的分析总结比我透彻。额......既然你这么厉害,那就你来,我向你学! 那么,后续我再做类似…...
堆(Heap)和栈(Stack),这两者通常是指内存管理中两种不同的内存区域
“堆栈”这个术语在计算机科学中有多种解释,主要有两种常见的含义:堆(Heap)和栈(Stack)。这两者通常是指内存管理中两种不同的内存区域。我们来详细探讨一下它们的工作原理、区别和应用。 1. 栈(Stack) 栈是一种后进先出(LIFO,Last In First Out)的数据结构。我们…...
CVPR-2025 | 长程视觉语言导航平台与数据集:迈向复杂环境中的智能机器人
作者:Xinshuai Song, Weixing Chen, Yang Liu, Weikai Chen, Guanbin Li, Liang Lin 单位:中山大学,Independent Researcher,鹏城实验室 项目主页:https://hcplab-sysu.github.io/LH-VLN 论文地址:https…...
Apifox Helper 自动生成API接口文档
在我们开发过程中我们在编写请求地址和编写请求参数的时候特别花费时间耗费了我们很多时间,作为一个程序员,更应该把精力时间集中在开发上, Apifox Helper 是 Apifox 团队针对 IntelliJ IDEA 环境所推出的插件,可以在 IDEA 环境中…...
历年云南大学计算机复试上机真题
历年云南大学计算机复试机试真题 在线评测:传送门:pgcode.cn 喝饮料 题目描述 商店里有 n 中饮料,第 i 种饮料有 mi 毫升,价格为 wi。 小明现在手里有 x 元,他想吃尽量多的饮料,于是向你寻求帮助&#x…...
笔记本 Win10 部署阿里通义千问 1.5-0.5B 大模型 mini 版
文章目录 1.环境准备1.1 硬件环境1.2 OS 环境1.3 Python 环境 2.环境安装2.1 CUDA 驱动下载安装2.2 torch 库下载安装2.3 transformers 库安装2.3 accelerate 库安装2.4 验证 CUDA 是否可用2.5 下载 Qwen1.5-0.5B 大模型 3.测试大模型3.1 加载大模型3.2 简单对话3.3 亲测体验感…...
Flutter三棵树是什么,为什么这么设计
目录 1. 三棵树的定义与职责 (1) Widget 树 (2) Element 树 (3) RenderObject 树 2. 三棵树的协同工作流程 3. 为什么设计三棵树? (1) 性能优化 (2) 逻辑解耦 (3) 灵活性 4. 三棵树的设计优势总结 示例:动态列表更新 常见面试追问 Flutter 的「三棵树」是其核心设…...
Postman中Authorization和Headers的区别
案例 笔者在进行token验证的时候碰到的问题 一般如果是进行token验证,大部分是在Headers下面添加token名称及token的值 这样:后端提取请求头的token即可 还有一种是,左侧选择Bearer Token,右侧添加token的值,后端传递的 大概…...
python使用openai的api的时候声明不要走系统代理,默认是走的
配置了以上的方式,还是不行。因为项目默认使用的是国内的大模型服务商,但是接口是和openapi通用的,所以可以直接使用,但是项目中有的链接还是要走系统代理的,所以就需要将两者区分开,配置openapi不走系统代…...
【免费】1949-2020年各省人均GDP数据
1949-2020年各省人均GDP数据 1、时间:1952-2020年 2、来源:国家统计局、统计年鉴 3、指标:各省人均GDP 4、范围:31省 5、指标解释:人均GDP(Gross Domestic Product per capita)是指一个国家…...
C 语言实战:打造字符串加密器及实验要点解析
在 C 语言的学习过程中,通过实际项目来巩固知识、提升编程能力是极为有效的方式。本次我们聚焦于 Imperative Programming in C 课程的实验内容,深入剖析如何用 C 语言实现一个字符串加密器(Scrambler),同时也会涉及实验中相关的 C 语言基础知识点,帮助大家更好地理解和掌…...
ThreadLocal(线程本地存储)
什么是 ThreadLocal? ThreadLocal 是 Java 中用于实现线程本地存储的一个类。它的主要作用是为每个线程提供独立的变量副本,从而避免多线程环境下的数据共享和竞争问题。 ThreadLocal 是一个工具类,允许你为每个线程创建独立的变量副本。每…...
《Python实战进阶》No24: PyAutoGUI 实现桌面自动化
No24: PyAutoGUI 实现桌面自动化 摘要 PyAutoGUI 是一个跨平台的桌面自动化工具,能够模拟鼠标点击、键盘输入、屏幕截图与图像识别,适用于重复性桌面任务(如表单填写、游戏操作、批量文件处理)。本集通过代码截图输出日志的实战形…...
功耗电流和耗电量的获取
1. 实验室环境: 在受控的实验条件下,我们使用 PowerMonitor 精确控制变量(如固定设备型号和系统版本、清理后台应用、设置恒定的亮度与音量、确保稳定的网络连接等),以获取高精度的电流测量数据,从而准确评…...
医疗送药机器人“空间拓扑优化+动态算法决策+多级容错控制”三重链式编程技术解析与应用
一、引言 1.1 研究背景与意义 在医疗体系中,高效精准的药品配送是保障医疗服务质量和患者安全的关键环节。随着医疗技术的不断进步和医疗需求的日益增长,传统的人工送药方式逐渐暴露出诸多弊端,如配送效率低下、易受人为因素干扰导致错误率上升、人力成本高昂等。特别是在…...
C++【类和对象】(结束篇)
C类和对象 1.static成员2.友元3.内部类4.匿名对象5.对象拷贝时的编译器优化 1.static成员 用static修饰的成员变量叫做静态成员变量,静态成员一定要在类外进行初始化。静态成员变量为所有类的共享,放入静态区,不属于某个具体对象,…...
[CISCN 2022 初赛]ezpop(没成功复现)
打开在线环境可以看到: 记得之前做过一个类似的就是有点像照着漏洞去复现。应该可以直接在网上找到链子去打。 www.zip查看路由是 Index/test,然后 post 传参 a: exp(参考了别的大神的wp): <?php //…...
QT编程之QGIS
一、QGIS介绍 Quantum GIS(QGIS)是开源地理信息系统桌面软件,使用GNU(General Public License)授权, 属于 Open Source eospatial Foundation( OSGeo )的官方计划。在 GNU 授权下&am…...
福特售后再添亮点,为烈马模块化车身改装提供专业支持
2024年5月17日,中国上海 2024 年北京国际车展期间,纯血敞篷越野车国产福特烈马正式上市并公布全系厂商指导价,价格区间为29.98万元至43.88万元。作为一台风格鲜明,个性突出的纯血硬核越野车,诞生于1966年的福特烈马&a…...
嵌入式C语言中堆栈管理与数据存储的精髓
在嵌入式开发中,理解C语言的内存管理和数据存储机制是至关重要的。本文将从堆栈管理和数据存储两个方面,深入探讨C语言在嵌入式Linux开发中的应用。 一、堆栈管理 1.1 栈的初始化与作用 栈是C语言运行的基础,主要用于存储函数参数、局部变量、函数返回值和编译器生成的临时…...
003_快乐数
链接:202. 快乐数 - 力扣(LeetCode) 202.快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为…...
【MySQL数据库】约束
在MySQL数据库中,约束(Constraint)是用于限制表中数据的一种规则,目的是为了确保数据的完整性以及一致性。下面我们就从建表时的约束、建表后如何添加约束等几个方面,讲解MySQL中常用的几种约束。 创建时约束 分类 非空约束 非空…...
SANS 网络安全 网络安全三件套
基本设置篇 一、在线安全的四个误解 Internet实际上是个有来有往的世界,你可以很轻松地连接到你喜爱的站点,而其他人,例如黑客也很方便地连接到你的机器。实际上,很多机器都因为自己很糟糕的在线安全设置无意间在…...
LSTM方法实践——基于LSTM的汽车销量时序建模与预测分析
Hi,大家好,我是半亩花海。本实验基于汽车销量时序数据,使用LSTM网络(长短期记忆网络)构建时间序列预测模型。通过数据预处理、模型训练与评估等完整流程,验证LSTM在短期时序预测中的有效性。 目录 一、实验…...
[Windows] 轻量级景好鼠标录制器 v2.1 单文件版,支持轨迹+鼠标键盘录制复刻
[Windows] 轻量级景好鼠标录制器 链接:https://pan.xunlei.com/s/VOLHz0rPyqdhV4bgyTYuW6W7A1?pwd98uj# 软件特性: 高效播放控制:动作间隔优化至100 ms,进度条可视化,支持随机循环/多次播放。 深度自定义࿱…...
表单 schema 配置化
一、前沿 基于 Ant Design Vue 组件库实现了表单的配置化生成,通过 schema 配置化的方式实现表单的动态渲染、数据绑定和更新等功能,而提交按钮及获取数据逻辑由使用方自行提供。通过 schema 对象来定义表单的结构和属性,modelData 对象存储…...
LINUX --- KVM
什么是 KVM?– 基于内核的虚拟机简介 – AWS (amazon.com) 什么是 KVM? 基于内核的虚拟机(KVM)是一种软件功能,您可以将其安装在物理 Linux 机器上以创建虚拟机。虚拟机是一种软件应用程序,可作为另一台实…...
LabVIEW VI Scripting实现连接器窗格自动化
通过VI Scripting自动化配置连接器窗格,可大幅提升开发效率、统一接口规范,并适配动态需求。以下为真实场景中的典型应用案例,涵盖工业、汽车电子及教育领域,展示其实际价值与实施效果。 特点: 程序化配置:…...
网络安全信息收集[web子目录]:dirsearch子目录爆破全攻略以及爆破字典结合
目录 一、dirsearch 工具详细使用攻略 1. 安装 前提条件 安装步骤 可选:直接下载预编译版本 2. 基本用法 命令格式 参数说明 示例 3. 核心功能与高级用法 3.1 多线程加速 3.2 自定义字典 3.3 递归扫描 3.4 过滤响应 3.5 添加请求头 3.6 代理支持 3…...
