Android安卓实战项目(5)---完整的健身APP基于安卓(源码在文末)可用于比赛项目或者作业参考中
Android安卓实战项目(5)—完整的健身APP(源码在文末🐕🐕🐕)可用于比赛项目
一.项目运行介绍
1.大致浏览
【bilibili视频】 https://www.bilibili.com/video/BV1uX4y177iR/?
(1)开机动画

(2)App介绍









(3)身体指标填写


(4)体脂计算

(5)主页功能介绍


二.具体实现
(1)主项目实现
MainActivity.java
package com.example.fitnessfreak;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.CompositePageTransformer;
import androidx.viewpager2.widget.MarginPageTransformer;
import androidx.viewpager2.widget.ViewPager2;import android.content.Intent;
import android.os.Bundle;
import android.view.View;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {ViewPager2 viewPager2;androidx.appcompat.widget.Toolbar toolbar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewPager2 = findViewById(R.id.viewpager);toolbar=findViewById(R.id.toolbar);toolbar.setNavigationIcon(R.drawable.bacharrow);setSupportActionBar(toolbar);toolbar.setNavigationOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//startActivity(new Intent(getApplicationContext(),BMIResultsActivity.class));//Toast.makeText(getApplicationContext(),"uhu",Toast.LENGTH_LONG).show();onBackPressed();}});List<Slideritem> slideritems= new ArrayList<>();slideritems.add(new Slideritem(R.drawable.img1));slideritems.add(new Slideritem(R.drawable.img2));slideritems.add(new Slideritem(R.drawable.img3));slideritems.add(new Slideritem(R.drawable.img4));slideritems.add(new Slideritem(R.drawable.img5));slideritems.add(new Slideritem(R.drawable.img6));slideritems.add(new Slideritem(R.drawable.img7));slideritems.add(new Slideritem(R.drawable.remainder));slideritems.add(new Slideritem(R.drawable.premium));viewPager2.setAdapter(new SliderAdapter(slideritems,viewPager2));viewPager2.setClipToPadding(false);viewPager2.setClipChildren(false);viewPager2.setOffscreenPageLimit(3);viewPager2.getChildAt(0).setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);CompositePageTransformer compositePageTransformer=new CompositePageTransformer();compositePageTransformer.addTransformer(new MarginPageTransformer(3));compositePageTransformer.addTransformer(new ViewPager2.PageTransformer() {@Overridepublic void transformPage(@NonNull View page, float position) {float r= 1-Math.abs(position);page.setScaleY(0.85f + r * 0.15f);}});viewPager2.setPageTransformer(compositePageTransformer);}public void gotoBMIcalci(View view) {startActivity(new Intent(getApplicationContext(),BMIActivity.class));}@Overridepublic void onBackPressed() {super.onBackPressed();}
}
这段代码是一个名为 MainActivity 的 Android 活动(Activity)类。分析代码:
-
导入语句:
导入了必要的 Android 和 Java 库,包括 androidx 相关库和一些控件、视图工具。 -
MainActivity类定义:
该类继承了AppCompatActivity,是使用 appcompat 库功能的活动的基类。 -
onCreate方法:
这是活动的入口点,它初始化布局和其他控件,并对页面进行一些特殊效果的设置。 -
布局初始化:
setContentView(R.layout.activity_main);:此方法设置活动的布局,从名为activity_main.xml的 XML 布局文件加载UI元素。- 获取
ViewPager2控件和自定义Toolbar控件,并设置 Toolbar 的导航图标以及导航按钮的点击事件监听器。
-
图片数据初始化:
- 创建了一个包含多个
Slideritem对象的列表slideritems,每个对象包含一个图片资源 ID。 SliderAdapter是一个自定义适配器,将图片数据绑定到ViewPager2控件上。
- 创建了一个包含多个
-
设置 ViewPager2 特效:
viewPager2.setClipToPadding(false);和viewPager2.setClipChildren(false);:这些代码取消了 ViewPager2 和其子项的裁剪,以便让页面之间的元素显示出边界。viewPager2.setOffscreenPageLimit(3);:这设置了 ViewPager2 的缓存页面数量,以优化滑动性能。viewPager2.getChildAt(0).setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);:这代码禁用了 ViewPager2 的滑动过度效果。
-
创建页面变换器:
CompositePageTransformer是一个组合的页面变换器,它可以将多个页面变换器组合在一起使用。MarginPageTransformer是一个页面变换器,它添加页面间的边距,用于在页面之间创建空白间隔。ViewPager2.PageTransformer是一个页面变换器接口,它用于自定义页面的转换效果。在这里,代码使用了该接口来实现页面的缩放效果。
-
gotoBMIcalci方法:
这是一个公开的方法,当用户点击按钮时,会启动BMIActivity活动,用于导航到另一个界面。 -
onBackPressed方法:
这是对返回按钮的处理,默认情况下调用super.onBackPressed()来处理返回事件。
(2)BMI体脂计算
BMIResultsActivity.java
package com.example.fitnessfreak;import androidx.appcompat.app.AppCompatActivity;import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;public class BMIResultsActivity extends AppCompatActivity {
TextView resultnum, resulttv;
Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_bmiresults);SharedPreferences sharedPreferences = getSharedPreferences("Settings", Context.MODE_PRIVATE);SharedPreferences.Editor myEdit = sharedPreferences.edit();resultnum=findViewById(R.id.bmiresult);resulttv=findViewById(R.id.resulttv);button=findViewById(R.id.button);String a = getIntent().getStringExtra("bmi");myEdit.putString("bmi", a);myEdit.commit();myEdit.apply();resultnum.setText(a);float bmi = Float.parseFloat(a);if (bmi<=18.5){resulttv.setText("Classification: UnderWeight");}else if (bmi<=24.9&&bmi>18.5){resulttv.setText("Classification: Normal Weight");}else if (bmi<29.9&&bmi>25.0){resulttv.setText("Classification: OverWeight");}else if (bmi>30.0&&bmi<34.5){resulttv.setText("Classification: Obesity class I");}else if (bmi>35.0&&bmi<39.9){resulttv.setText("Classification: Obesity class II");}else if (bmi>=40.0){resulttv.setText("Classification: Obesity class III");}button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent=new Intent(getApplicationContext(),DashBoardActivity.class);intent.putExtra("bmi",a);Toast.makeText(getApplicationContext(),""+a,Toast.LENGTH_LONG).show();startActivity(intent);}});}
}
这段代码是一个名为 BMIResultsActivity 的 Android 活动(Activity)类,它负责显示从前一个活动传递过来的BMI(身体质量指数)结果以及根据该值进行分类。逐步分析代码如下:
-
导入语句:
导入了必要的 Android 和 Java 库,以确保活动能够正确运行。 -
BMIResultsActivity类定义:
该类继承了AppCompatActivity,它是使用 appcompat 库功能的活动的基类。 -
onCreate方法:
这是活动的入口点,它初始化布局并处理BMI的计算和分类。 -
布局初始化:
setContentView(R.layout.activity_bmiresults);:此方法设置活动的布局,从名为activity_bmiresults.xml的 XML 布局文件加载UI元素。
-
BMI 计算和分类:
getSharedPreferences("Settings", Context.MODE_PRIVATE);:这获取了一个名为 “Settings” 的共享偏好设置文件,它是私有模式,意味着只能被应用本身访问。SharedPreferences.Editor myEdit = sharedPreferences.edit();:它获取一个编辑器用于修改共享偏好设置。String a = getIntent().getStringExtra("bmi");:通过 Intent 获取了传递自前一个活动的 “bmi” 值。myEdit.putString("bmi", a);:将 “bmi” 值存储在共享偏好设置中,以便将来使用。- 代码接着根据计算得到的
float bmi值,设置了resulttvTextView 中的分类文本。
-
按钮点击事件监听器:
button.setOnClickListener(new View.OnClickListener() {...});:为button(可能是一个按钮视图)添加了一个点击事件监听器,用于处理点击事件。- 当按钮被点击时,它创建一个 Intent 来启动
DashBoardActivity并将 “bmi” 值通过 Intent 的附加信息传递给该活动。 - 同时显示一个 Toast 消息,显示当前 “bmi” 值。
三.项目源码
链接:https://pan.baidu.com/s/1SwoW1Hi59e1dc1OLRgEnrA?pwd=jynl
提取码:jynl
这个项目的话,文件已加密,联系作者得密码,有偿(包括项目改进,技术文档,实验报告)
V:15135757306
相关文章:
Android安卓实战项目(5)---完整的健身APP基于安卓(源码在文末)可用于比赛项目或者作业参考中
Android安卓实战项目(5)—完整的健身APP(源码在文末🐕🐕🐕)可用于比赛项目 一.项目运行介绍 1.大致浏览 【bilibili视频】 https://www.bilibili.com/video/BV1uX4y177iR/? (1&…...
AutoSAR系列讲解(实践篇)11.2-存储处理与Block
目录 一、NVRAM Block NVRAM Block的类型 二、Fee Block 三、Ea Block 四、总结 同通信的PDU一样,存储功能也需要一些特殊的数据结构来存放和管理我们的NV数据(NV data) 一、NVRAM Block NVRAM Block的作用类似于IPDU,但它们两仅仅只是作用上相似,其功能实现是完全…...
K8s总结
K8s 是什么 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的机制…...
3.playbook剧本二
文章目录 playbook二Roles模块roles模式安装LNMP创建nginxfiles目录handlers目录tasks目录templates目录vars目录 创建mysqltasks目录 创建phpfiles目录handlers目录tasks目录templates目录vars目录 创建LNMP剧本文件 playbook二 Roles模块 角色的作用:把playbook…...
【MySQL】视图与用户管理
【MySQL】视图 视图视图概念使用基表与视图的相互影响 用户管理新增用户删除修改密码 用户权限授予权限回收权限 视图 视图概念 视图就是一张虚拟表,其内容由查询定义。与真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化影响到基表&…...
LINUX系统监控工具ATOP的使用
最近在排查嵌入式系统的问题,需要监控各种系统资源的消耗。 ATOP不错,可以实时看,也可以保存成日志,分析历史情况。 直接使用: atop 想写入文件就是: sudo atop -a -w /home/guo/atoplog2.log 2 2的意…...
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,ba…...
iPhone 8透明屏的透明度高吗?
iPhone 8是苹果公司于2017年推出的一款智能手机,它采用了全新的设计和技术,其中一个亮点就是透明屏。 透明屏是指屏幕具有透明度,可以透过屏幕看到背后的物体。 iPhone 8的透明屏采用了最新的OLED技术,这种技术可以实现更高的对比…...
Vue2 第十五节 组件间通信方式
1.组件的自定义事件 2.全局事件总线 3.消息订阅与发布 一.组件的自定义事件 1.1 绑定自定义事件 ① 自定义事件就是一种组件间通信方式,用于子组件和父组件之间传递数据 ② props来实现子组件给父组件传递数据 (1)先给父组件中绑定一个…...
maven的下载与安装
文章目录 1 官网下载地址2 设置环境变量3 设置仓库地址4 添加阿里云的中央镜像 1 官网下载地址 https://maven.apache.org/ 下载 2 设置环境变量 MAVEN_HOME PATH mvn -v验证 3 设置仓库地址 仓库地址 4 添加阿里云的中央镜像 阿里云中央镜像...
BroadcastChannel 实现浏览器tab无刷新通讯
前提须知 使用 BroadcastChannel 来实现浏览器tab通讯必须是同源的BroadcastChannel 支持多tab间通讯mdn 链接 具体使用 发送方使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewpor…...
98. Python基础教程:try...except...finally语句
【目录】 文章目录 1. try...except...finally语法介绍2. try...except...finally执行顺序3. 捕获特定类型的异常4. 捕获所有类型的异常5. 实操练习-打开txt文件并输出文件内容 【正文】 在今天的课程中,我们将学习Python中的异常处理语句try...except...finally。 …...
c语言实现简单的tcp客户端
功能:实现一个简单的tcp客户端,连接本地端口8888的tcp服务端,并发送一条报文。 /* * File: main.c* Author: vincent** Created on 2023年8月3日, 上午9:56*/#include <stdio.h> #include <stdlib.h> #include <string.h…...
RocketMQ详解及注意事项
RocketMQ是阿里巴巴开源的一款分布式消息中间件,具有高吞吐量、高可用性、可扩展性和稳定性强等特点,广泛应用于异步消息、应用解耦、流量削峰填谷等场景。本文将详细介绍RocketMQ的基本架构、工作流程、消息模型,并列出在使用RocketMQ时需要…...
选择适合的项目管理系统,了解有哪些选择和推荐
随着科技的进步和全球竞争的加剧,项目管理已经成为企业成功的关键要素。为了更好地组织和监控项目,许多企业和组织正在采用项目管理系统(PMS)。本文将探讨项目管理系统的主要组成部分以及其在实际应用中的优势。 “项目管理系统有哪些?国际上比较常见的…...
linux基础命令-cd
切换当前工作目录使用 cd 命令 在 Linux 操作系统中,cd 是一个常用的命令,用于切换当前的工作目录。工作目录是用户当前所在的文件夹,执行命令时将会在该目录中进行操作。cd 命令的功能是更改当前工作目录到指定的目录位置。在本文中…...
MySQL数据库分库分表备份
分库备份 创建脚本并编写 [rootlocalhost scripts]# vim bak_db_v1.sh #!/bin/bash 备份的路径 bak_path/backup/db 账号密码 mysql_cmd-uroot -pRedHat123 需要排除的数据库 exclude_dbinformation_schema|mysql|performance_schema|sys 检验备份路径是否存在&#…...
PyTorch 中的累积梯度
https://stackoverflow.com/questions/62067400/understanding-accumulated-gradients-in-pytorch 有一个小的计算图,两次前向梯度累积的结果,可以看到梯度是严格相等的。 代码: import numpy as np import torchclass ExampleLinear(torch…...
【面试精品】运维工程师需要具备的核心能力有哪些?
运维,在部分没有接触过IT的小伙伴的概念中觉得是一个比较低级的职位,很容易从字面理解为运营、维护. 很多朋友认为,无论IDC机房运维、网络运维、桌面运维、Linux系统运维、数据库运维、云计算运维、等在互联网公司中的工作就是安装系统&…...
微服务实战项目-学成在线-选课学习(支付与学习中心)模块
微服务实战项目-学成在线-选课学习(支付与学习中心)模块 1 模块需求分析 1.1 模块介绍 本模块实现了学生选课、下单支付、学习的整体流程。 网站的课程有免费和收费两种,对于免费课程学生选课后可直接学习,对于收费课程学生需要下单且支付成功方可选…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...
动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...
