文章目录

  • 一、系统背景
  • 二、系统概述
  • 三、开发环境
  • 四、系统结构
  • 五、详细设计
    • 5.1、RecycleView
    • 5.2、ViewPager
    • 5.3、OkHttp
  • 六、运行演示
  • 七、系统总结
  • 八、源码获取

一、系统背景

近年来,随着生活质量的不断提高,大学生更加追求饮食的享受,比如在周末经常会出去吃火锅和烧烤,但是吃完了也不运动,很快就长肉了。长时间饮食不规律,身体还会出现不良症状。所以,越来越多的人都去健身房办卡健身,希望保持身体健康,在此背景下,健身系统应运而生。

二、系统概述

进入应用,首先是欢迎界面,等待3s后跳转到登录界面,我们先注册账号,使用MD5加密,安全性更强。选择记住密码的话,会在下次进入应用时自动填充账号密码,否则不会。登录成功进入主页面,可以选择个人信息或者运动项目。选择个人信息,可以修改信息,修改完之后会更新数据库中User表的数据。下方还会显示名言警句,每次打开都会显示不同的内容。选择运动项目,进入项目列表,选择任意运动项目,会进入锻炼界面,这里有锻炼视频,下方有计时功能,可以进行开始锻炼、暂停锻炼、停止锻炼和结束锻炼。

涉及知识点:MD5加密,文件存储,Sqlite数据库,VideoView视频播放器,Thread多线程编程,OkHttp网络通信框架,Toolbar工具栏,RecycleView列表,Handler异步消息机制,ViewPager轮播图,Json数据解析,Glide图片加载库。

三、开发环境

本项目开发的Android Studio版本比较早,只要你的Android Studio是近两年从官网下载的,都是满足的。

四、系统结构

我们展开Android视图下的目录,也就是源代码文件,下面介绍每个包的内容。

  • activity是ExerciseActivity等活动,主要活动都在这里,命名也遵循大驼峰命名法。
  • adapter是列表布局的适配器,因为运动项目都是以列表呈现,轮播图也如此,将我们准备的数据源按照我们设定的方式显示到屏幕上,就是用的适配器。
  • app是应用基础,比如欢迎、登录和注册。
  • bean实体类,大家肯定很熟悉了,数据库存储肯定用到数据表,那么bean就起到了表结构的作用,直接根据bean进行建表,这里是谚语bean、运动项目bean和用户bean。
  • database就是sqlite数据库,通过DatabaseHelper帮助类对象访问数据库,UserDao进行用户表的数据库操作。
  • http是发送和接收Http请求的工具类,使用OkHttp网络通信框架,client发送http请求,并获取服务器返回的数据,然后使用GSON进行Json解析。

五、详细设计

5.1、RecycleView

RecycleView列表使用起来很简单,四行代码引用下就可以。

<?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=".Activity.SportActivity"><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recycler_view"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>

设置下子项的布局,CardView里面嵌套个ImageView,主要是CardView的radius要设置下。

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardViewxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_margin="5dp"app:cardCornerRadius="15dp"><ImageViewandroid:id="@+id/sport_image"android:layout_width="match_parent"android:layout_height="200dp"android:scaleType="centerCrop"android:background="@drawable/p7"/></androidx.cardview.widget.CardView>

然后创建Adapter,重写父类方法,主要是ViewHolder进行控件绑定,这里只展示这部分代码。

    static class ViewHolder extends RecyclerView.ViewHolder{CardView cardView;ImageView sportImage;public ViewHolder(View itemView) {super(itemView);cardView = (CardView) itemView;sportImage = itemView.findViewById(R.id.sport_image);}}

写完Adapter代码之后,在主函数里面,就是创建数据源,创建适配器,然后设置适配器,三步完成列表的显示。

 initSport();RecyclerView recyclerView = findViewById(R.id.recycler_view);GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 1);recyclerView.setLayoutManager(gridLayoutManager);// 创建适配器,同时加载数据源sportAdapter = new SportAdapter(sportList);// 设置适配器recyclerView.setAdapter(sportAdapter);

5.2、ViewPager

首先到处搜索资源图片,然后创建数组存放它们的id。然后创建图片列表和点列表,设置图片view的宽高,将图片view加载到集合中,创建图片对应的指示器小圆点,将小圆点添加到布局当中,为了方便操作,将小圆点加入统一管理的集合。

  // 设置滑动页面private void initPager() {ivList = new ArrayList<>();pointList = new ArrayList<>();for (int i = 0; i < imgIds.length; i++) {ImageView iv = new ImageView(this);iv.setImageResource(imgIds[i]);iv.setScaleType(ImageView.ScaleType.FIT_XY);// 设置图片view的宽高LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);iv.setLayoutParams(lp);// 将图片view加载到集合中ivList.add(iv);// 创建图片对应的指示器小圆点ImageView piv = new ImageView(this);piv.setImageResource(R.drawable.point_normal);LinearLayout.LayoutParams plp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);plp.setMargins(20, 0, 0, 0);piv.setLayoutParams(plp);// 将小圆点添加到布局当中pointLayout.addView(piv);// 为了方便操作,将小圆点加入统一管理的集合pointList.add(piv);}pointList.get(0).setImageResource(R.drawable.point_focus);pagerAdapter = new PagerAdapter(this, ivList);viewPager.setAdapter(pagerAdapter);}

然后就是轮播图的监听器,实现手动滑动,然后利用Handler消息机制进行自动滑动。

    // 设置页面滑动的监听器private void setVPListener() {viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {for (int i = 0; i < pointList.size(); i++) {pointList.get(i).setImageResource(R.drawable.point_normal);}pointList.get(position).setImageResource(R.drawable.point_focus);}@Overridepublic void onPageScrollStateChanged(int state) {}});}

5.3、OkHttp

通常情况下,我们都应该将这些通用的网络操作提取到一个公共的类里,并提供一个静态方法,当想要发起网络请求的时候,只需要简单调用这个方法即可。HttpURLConnection的写法很复杂,使用OkHttp会变得非常简单,接口设计非常人性化,使得我们只需要编写少量的代码就能完成较为复杂的网络操作。

public class HttpUtil {public static void sendOkHttpRequest(String address, okhttp3.Callback callback) {OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url(address).build();client.newCall(request).enqueue(callback);}
}

Http请求结果都回调到了okhttp3.Callback当中,所以直接获取response的body的string(),获取数据然后进行显示,解析和显示方法进行了封装。

HttpUtil.sendOkHttpRequest(URLUtils.index_url, new okhttp3.Callback() {@Overridepublic void onFailure(Call call, IOException e) {Toast.makeText(PersonActivity.this, "今日励志古言接口次数已用完。", Toast.LENGTH_SHORT).show();}@Overridepublic void onResponse(Call call, Response response) throws IOException {// 得到服务器返回的数据String result = response.body().string();parseShowData(result);}});

六、运行演示

Android Studio实现一个健身系统

七、系统总结

本次健身系统可以说是非常简单了,非常适合刚学习Android的同学进行练习。在简单的同时包含了很多常用知识点,比如MD5加密,文件存储,Sqlite数据库,VideoView视频播放器,Thread多线程编程,OkHttp网络通信框架,Json数据解析等。相信掌握之后,会更好地打牢android基础。

八、源码获取

Android Studio实现简单的健身系统,一起锻炼身体吧相关推荐

  1. 计算器android studio代码,Android studio实现简单计算器

    本文实例为大家分享了Android studio实现简单计算器的具体代码,供大家参考,具体内容如下 需求分析 在Android studio中设计并实现一个简单的计算器,实现连续的加减乘除运算. 界面 ...

  2. android页面布局计算机,Android Studio制作简单计算器App

    Android Studio制作简单计算器App 计算机界面如图: 程序设计步骤: (1)在布局文件中声明编辑文件框EditText,按钮Button等组件. (2)在MainActivity中获取组 ...

  3. 使用Android Studio实现简单的计算器(已亲自实验通过)

    使用Android Studio实现简单的计算器(已亲自实验通过) 实验内容 用多个Activity实现分别实现加.减.乘.除的计算器,具体包括:通过一个启动Activity布置4个按钮,每个按钮分别 ...

  4. Android实现有声计算器代码,android studio实现简单的计算器(无bug)

    本文实例为大家分享了android studio实现简单计算器的具体代码,供大家参考,具体内容如下 1.效果图 2布局代码 3.逻辑代码 package com.example.myzhuoye; i ...

  5. github android 计算器,Android studio实现简单的计算器

    本文实例为大家分享了Android studio实现简单计算器的具体代码,供大家参考,具体内容如下 需求分析及概要设计 目的 开发一个简单的计算器App,使之能够完成加减乘除混合运算 工具及环境 使用 ...

  6. android 购物车实现,Android Studio实现简单购物车功能

    Android Studio实现简单购物车功能 发布时间:2020-08-30 17:23:56 来源:脚本之家 阅读:241 作者:攀岩嘉 本文实例为大家分享了Android九宫格图片展示的具体代码 ...

  7. Android Studio实现一个点餐系统

    Android Studio实现一个点餐系统 写在前面 2022/11/18 重写了之前做的课程作业 有需要的可以看一下 http://t.csdn.cn/yNOaJ 之前做的期末作业,现在发到博客上 ...

  8. Android Studio实现简单的音乐播放(播放、暂停、停止、上一首、下一首)

    Android Studio实现简单的音乐播放(播放.暂停.停止.上一首.下一首) 简要介绍 采用Service组件实现后台播放,BroadcastReceiver实现消息传递.BroadcastRe ...

  9. Android Studio 超级简单的打包生成apk的方法

    本文介绍了Android Studio 超级简单的打包生成apk,分享给大家,也给自己留个笔记. 为什么要打包: apk文件就是一个包,打包就是要生成apk文件,有了apk别人才能安装使用.打包分de ...

最新文章

  1. angular select设置默认选中_改进 Angular + Jest 项目中组件测试的调试
  2. ncbi查找目的基因序列_使用NCBI设计qPCR引物方法
  3. java中main函数的args参数
  4. mysql timestamp 并发_MySQL 实现 EF Code First TimeStamp/RowVersion 并发控制
  5. jQuery之ajax错误调试分析
  6. 【路径规划】全局路径规划算法——动态规划算法(含python实现)
  7. python pytz_python – 找不到符合要求pytz的版本
  8. vue截取一个字符串_字符串截取方法
  9. Android批量打包-如何一秒内打完几百个apk渠道包
  10. 电子商务电子商务| 第2部分
  11. 简易处理字典MDX文件的方法
  12. android 保存图片到手机相册,并通知相册刷新
  13. TextCnn原理及实践
  14. Java之final修饰变量
  15. 东京奥运会闭幕式,中国队88枚奖牌收官!
  16. inno setup 安装路径框学习
  17. 使用Win32 API获取Windows系统主题色
  18. 求购一款淘宝京东抢优惠卷软件
  19. 从“钢铁大国”迈入“钢铁强国”,看我国冶金制造技术的崛起!
  20. ZEMAX 典型照明系统设计周期的概述

热门文章

  1. 2019年04月01日_拔剑-浆糊的传说_新浪博客
  2. 强化学习笔记(3)-时序差分更新算法
  3. windows通过Sakura Frp内网穿透实现远程控制
  4. 大白话 5 分钟带你走进人工智能:神经网络之反向传播详细案例及解释
  5. word和wps公式编辑器的区别
  6. Manytasking optimization MATP
  7. 开源规则引擎 drools
  8. 【装卸臂项目】【MATLAB】液压阀模型——输入开度输出速度
  9. 解决2022.3.1版本中 IDEA中 XML文件屎黄色背景 的方法
  10. Stratifyd汪晓宇:当公司目标都指向客户,团队管理其实很简单 | 舵舟