Android安卓实战项目(5)---完整的健身APP基于安卓(源码在文末)可用于比赛项目或者作业参考中

本文主要是介绍Android安卓实战项目(5)---完整的健身APP基于安卓(源码在文末)可用于比赛项目或者作业参考中,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android安卓实战项目(5)—完整的健身APP(源码在文末🐕🐕🐕)可用于比赛项目

一.项目运行介绍

1.大致浏览

【bilibili视频】
https://www.bilibili.com/video/BV1uX4y177iR/?share_source=copy_web&vd_source=b2e9b9ed746acda34f499009647748ed

(1)开机动画

image-20230802181907940

(2)App介绍

image-20230802181958039

image-20230802182018553

image-20230802182032119

image-20230802182047293

image-20230802182059465

image-20230802182114423

image-20230802182126318

image-20230802182141117

image-20230802182156230

(3)身体指标填写

image-20230802182226275

image-20230802182248196

(4)体脂计算

image-20230802182300732

(5)主页功能介绍

image-20230802182312259

image-20230802182330195

二.具体实现

(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)类。分析代码:

  1. 导入语句:
    导入了必要的 Android 和 Java 库,包括 androidx 相关库和一些控件、视图工具。

  2. MainActivity 类定义:
    该类继承了 AppCompatActivity,是使用 appcompat 库功能的活动的基类。

  3. onCreate 方法:
    这是活动的入口点,它初始化布局和其他控件,并对页面进行一些特殊效果的设置。

  4. 布局初始化:

    • setContentView(R.layout.activity_main);:此方法设置活动的布局,从名为 activity_main.xml 的 XML 布局文件加载UI元素。
    • 获取 ViewPager2 控件和自定义 Toolbar 控件,并设置 Toolbar 的导航图标以及导航按钮的点击事件监听器。
  5. 图片数据初始化:

    • 创建了一个包含多个 Slideritem 对象的列表 slideritems,每个对象包含一个图片资源 ID。
    • SliderAdapter 是一个自定义适配器,将图片数据绑定到 ViewPager2 控件上。
  6. 设置 ViewPager2 特效:

    • viewPager2.setClipToPadding(false);viewPager2.setClipChildren(false);:这些代码取消了 ViewPager2 和其子项的裁剪,以便让页面之间的元素显示出边界。
    • viewPager2.setOffscreenPageLimit(3);:这设置了 ViewPager2 的缓存页面数量,以优化滑动性能。
    • viewPager2.getChildAt(0).setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);:这代码禁用了 ViewPager2 的滑动过度效果。
  7. 创建页面变换器:

    • CompositePageTransformer 是一个组合的页面变换器,它可以将多个页面变换器组合在一起使用。
    • MarginPageTransformer 是一个页面变换器,它添加页面间的边距,用于在页面之间创建空白间隔。
    • ViewPager2.PageTransformer 是一个页面变换器接口,它用于自定义页面的转换效果。在这里,代码使用了该接口来实现页面的缩放效果。
  8. gotoBMIcalci 方法:
    这是一个公开的方法,当用户点击按钮时,会启动 BMIActivity 活动,用于导航到另一个界面。

  9. 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(身体质量指数)结果以及根据该值进行分类。逐步分析代码如下:

  1. 导入语句:
    导入了必要的 Android 和 Java 库,以确保活动能够正确运行。

  2. BMIResultsActivity 类定义:
    该类继承了 AppCompatActivity,它是使用 appcompat 库功能的活动的基类。

  3. onCreate 方法:
    这是活动的入口点,它初始化布局并处理BMI的计算和分类。

  4. 布局初始化:

    • setContentView(R.layout.activity_bmiresults);:此方法设置活动的布局,从名为 activity_bmiresults.xml 的 XML 布局文件加载UI元素。
  5. 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 值,设置了 resulttv TextView 中的分类文本。
  6. 按钮点击事件监听器:

    • 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基于安卓(源码在文末)可用于比赛项目或者作业参考中的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/407149

相关文章

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语