20212416 2023-2024-2 《移动平台开发与实践》综合实践

news2024/11/27 7:34:10

移动平台开放综合实践

  • 1.实验内容
  • 2.实验过程
    • 2.1 确定基础功能
    • 2.2 设计UI界面
    • 2.3 编写程序运行代码
    • 2.4 在基本功能的基础上丰富功能
  • 3. 代码分析
    • 3.1设置按钮的点击事件监听器
    • 3.2 比分更新模块
    • 3.3 比分存储模块
  • 4. 运行结果
  • 5.实践中遇到的问题及解决
  • 6.学习感悟与思考
  • 参考资料

1.实验内容

  • 因为我是排球场常客,打比赛时记分常常会出现这样一些问题,微信小程序方便但是疯狂弹广告,稍不留神就跳转拼多多淘宝;想连着记几局却要求你看一个28秒的广告,又一个52秒的广告,越看越长。用纸质记分牌吧,损耗严重,据已知数据,蓝队的0、1、9分的分值纸已经摇摇欲坠,红队的"2"更是不知所踪,奈何经费紧张,队服都得省吃俭用买别说频繁地添置新的纸质记分牌了。所以,借着这次机会,俺老宁挺身而出,自己设计了一款简单的记分app。

2.实验过程

2.1 确定基础功能

  • 我希望这个app首先具有“记分”这一基本功能;其次,要实现复用,还得能够重置比赛的分数;最后,如果点错了(给队伍加错分了),还需要有撤销的功能。

2.2 设计UI界面

  • 根据上述功能,能够确定下来的有“加分”按钮,“撤销”按钮,“重置”按钮,还需要有用来显示两队分数的分数板块。
  • 为了更美观也更符合主题一些,我们还可以找一张好看的背景图,再调整一下透明度。
  • 最后效果如下:
    在这里插入图片描述

2.3 编写程序运行代码

  • 代码其实主要分为三个模块,一个是设置按钮的点击事件监听器,一个是比分更新模块,还有就是比分存储模块。详见下面的代码分析。

2.4 在基本功能的基础上丰富功能

  • 我的设想是增加一个图表,能够根据实时得分情况更新,从而能直观地看到两支队伍在什么时间得分,或者说在哪个阶段集中得分,从而反映比赛场上的分数走势以及队员的状态变化等。
  • 但是我遇到了一个问题,图表是实时更新的,也就是说我每点击一次加分按钮,图表都要全部更新一次,那我之前的数据点如何体现在新的图表中?存储在什么地方能够保证它能够一直保存呢?
  • 这个我一直没有找到好的解决办法,导致做出来的图表会在更新分数后被新的分数覆盖,所以现在的代码里没有这个功能,如果找到了好的解决办法我就回来删掉这段话。

3. 代码分析

3.1设置按钮的点击事件监听器

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    redTeamScoreTextView = findViewById(R.id.red_team_score);
    blueTeamScoreTextView = findViewById(R.id.blue_team_score);
    redTeamButton = findViewById(R.id.red_team_button);
    blueTeamButton = findViewById(R.id.blue_team_button);
    resetButton = findViewById(R.id.reset_button);
    redTeamUndoButton = findViewById(R.id.red_team_undo_button);
    blueTeamUndoButton = findViewById(R.id.blue_team_undo_button);

    sharedPreferences = getSharedPreferences("ScorePreferences", Context.MODE_PRIVATE);

    redTeamScore = sharedPreferences.getInt("redTeamScore", 0);
    blueTeamScore = sharedPreferences.getInt("blueTeamScore", 0);

    updateScores();

    redTeamButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            redTeamScore++;
            updateScores();
            saveScores();
        }
    });

    blueTeamButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            blueTeamScore++;
            updateScores();
            saveScores();
        }
    });

    resetButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            redTeamScore = 0;
            blueTeamScore = 0;
            updateScores();
            saveScores();
        }
    });

    redTeamUndoButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (redTeamScore > 0) {
                redTeamScore--;
                updateScores();
                saveScores();
            }
        }
    });

    blueTeamUndoButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (blueTeamScore > 0) {
                blueTeamScore--;
                updateScores();
                saveScores();
            }
        }
    });
}

3.2 比分更新模块

private void updateScores() {
    redTeamScoreTextView.setText(String.valueOf(redTeamScore));
    blueTeamScoreTextView.setText(String.valueOf(blueTeamScore));
}

3.3 比分存储模块

private void saveScores() {
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putInt("redTeamScore", redTeamScore);
    editor.putInt("blueTeamScore", blueTeamScore);
    editor.apply();
}

4. 运行结果

排球比赛记分牌

5.实践中遇到的问题及解决

  • 问题1:图表如何实现
  • 问题1解决方案:仅靠java代码实现可能做出来的界面不会太漂亮,我们选择导入MPAndroidChart库
  • 问题2:无法通过设置dependencies线上下载GitHub上的MPAndroidChart库,总是会报语法错,但是语法我都让gpt检查过了是没问题的,可能是我的AS不支持这样添加依赖的方法。
  • 问题2解决方案:呕心沥血寻找MPAndroidChart库的jar包

6.学习感悟与思考

  • 这次综合实践其实让我有些挫败,因为一开始就是奔着做一个自己感兴趣的软件开始的,基本功能的实现很简单。而附加的实时化图表功能,捣鼓了很久都没弄出来,加上紧张的期末,真让人胸中郁结。我的主要精力都花在怎么实现附加功能,最后却没个结果,竹篮打水一场空,真挺叫人难过的。不过好在基础功能实现了,以后排球队都要记住我的名字哈哈。

参考资料

MPAndroidChart下载和添加依赖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1845279.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 教程 - 05 构建编译

文章目录 构建工具cmake安装与使用CMakeLists.txt编写使用案例 构建工具 cmake, Cross Platform Make, (对C)跨平台编译工具,将CMakeLists.txt 文件编译为对应的文件,如linux下的 Makefile,然后使用make命…

【数据结构与算法(C语言)】离散事件模拟- 单链表和队列的混合实际应用

目录 1. 前言2. 流程图3. 数据结构3.1 单链表3.2 链式队列 4. 核心函数4.1 银行业务模拟 void BankSimulation()4.2 初始化 void OpenForDay()4.3 客户到达 void CustomerArrived(Event en)4.4 客户离开 void CustomerArrived(Event en) 5. 非核心函数5.1 新建客户 NewCustomer…

手机天线都去哪里了?

在手机的演变历程中,天线的设计和位置一直是工程师们不断探索和创新的领域。你是否好奇,现在的手机为什么看不到那些曾经显眼的天线了呢? 让我们一起揭开这个谜题。 首先,让我们从基础开始:手机是如何发出电磁波的&…

云手机在跨平台兼容性方面优势明显?有何应用场景

跨平台设备间无缝切换和数据同步的需求现在是很多人或者企业都需要的,云手机在这些方面似乎有很大优势?下面我们来具体探讨在兼容方面,云手机有何出彩之处?又支持哪些应用场景呢 先来说说云手机跨平台兼容性优势所在,要…

web端使用高德地图

web端使用高德地图 一、申请高德key和秘钥二、在项目中引入所需功能js、css文件三、实现地图选点、回显选点四、自定义地图私密限制 一、申请高德key和秘钥 申请高德key 申请成功后可以得到key 二、在项目中引入所需功能js、css文件 <script src"https://webapi.am…

大模型网信办备案全网最详细说明(附附件)

本文共分为以下几个章节 一、大模型算法备案的强制性 二、生成式人工智能(大语言模型)安全评估要点 三、大模型备案必备材料重点说明 四、大模型备案填报流程 五、大模型备案时间成本对比 六、备案建议 附录、过程性材料 一、大模型算法备案的强制性 1、强制要求备案 …

JMeter详解

一、线程组 作用:线程组就是控制Imeter用于执行测试的一组用户 位置:右键点击测试计划’-->添加 -->线程(用户)--> 线程组 特点: 模拟多人操作线程组可以添加多个&#xff0c;多个线程组可以并行或串行取样器(请求)和逻辑控制器必须依赖线程组才能使用线程组下可以…

ECM和MEMS技术在心肺声学监测中的应用

心肺疾病是全球范围内导致死亡的主要原因。因此&#xff0c;对这些疾病迹象的准确和快速评估对于为患者提供适当的医疗保健至关重要。心血管疾病最重要的迹象之一是心脏周期的异常。大多数呼吸系统疾病则表现为呼吸周期的异常。有多种方法可以监测心脏和肺部的周期。听诊是监测…

【面试干货】Java中的访问修饰符与访问级别

【面试干货】Java中的访问修饰符与访问级别 1、public2、protected3、默认&#xff08;没有访问修饰符&#xff09;4、private &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;访问修饰符用于控制类、变量、方法和构造器…

blender 快捷键 常见问题

一、快捷键 平移视图&#xff1a;Shift 鼠标中键旋转视图&#xff1a;鼠标中键缩放视图&#xff1a;鼠标滚动框选放大模型&#xff1a;Shift B 二、常见问题 问题&#xff1a;导入模型成功&#xff0c;但是场景中看不到。 解决办法&#xff1a;视图-裁剪起点&#xff0…

“Docker入门指南:概念与安装详解“

目录 # 概念 1. Docker常见问题 2. docker概念和安装 2.1 Docker的组成 2.2 Docker 组件及关系表 2.3 docker核心思想 2.4 docker镜像与容器两个核心概念 2.5 容器概念图 2.6 docker核心技术 2.6.1 镜像 (Image) 概述 关系 示例 2.6.2 容器 (Container) 概述 关…

贪吃蛇——c语言版

文章目录 演示效果实现的基本功能技术要点源代码实现功能GameStart打印欢迎界面和功能介绍绘制地图创建蛇创建食物 GameRun打印提示信息蛇每走一步 GameEnd蛇死亡后继续游戏 演示效果 贪吃蛇1.0演示视频 将终端应用程序改为控制台主机 实现的基本功能 贪吃蛇地图绘制蛇吃食物的…

[Mysql] 数据库基本概念

前言---数据库系统发展史 当今主流数据库介绍 一、操作系统 Linux操作系统 &#xff1a;RedHat CentOS Debian Ubuntu OpenSUSE 信创标准 会让系统逐渐国产化 国产系统&#xff1a;华为 欧拉 阿里 龙蜥 腾讯 tencentOS 银河麒麟 中标麒麟…

分享:MoneyPrinterTurbo只需一个视频主题或关键词全自动生成一个高清的短视频

MoneyPrinterTurbo是基于原有的MoneyPrinter项目进行优化和重构后推出的新版本。它利用先进的AI技术&#xff0c;通过用户提供的视频主题或关键词&#xff0c;全自动生成视频文案、素材、字幕以及背景音乐&#xff0c;并最终合成高清的短视频。 功能特性 AI智能文案生成&…

redis高可用-主从同步

目录 一&#xff1a;背景 二&#xff1a;实现方式 三&#xff1a;实际使用 一&#xff1a;背景 上一节我们介绍了centos下redis下的安装配置&#xff0c;是在单台服务器部署一个redis服务&#xff0c;这种模式是单机模式下使用的&#xff0c;如果出现服务故障&#xff0c;re…

Spring AI 调用 openAI 进行语音识别

Spring AI支持语音识别功能&#xff0c;目前仅支持OpenAI的Transcription模型。 项目搭建&#xff1a; 参考 Spring AI 介绍以及与 Spring Boot 项目整合 源码示例&#xff1a; RestController RequestMapping("/openai") public class OpenAiIAudioTranscriptionC…

幂集000

题目链接 幂集 题目描述 注意点 集合中不包含重复的元素 解答思路 可以使用深度优先遍历的思想按顺序将相应的元素添加到子集中&#xff0c;并将每个子集添加到结果集 代码 class Solution {public List<List<Integer>> subsets(int[] nums) {List<List&…

VirtualBox虚拟机下安装Ubuntu24.04操作系统

目录 0 背景1 虚拟机的安装1.1 下载安装包1.2 走安装向导 2 操作系统的安装2.1 下载光盘镜像文件2.2 安装操作系统到虚拟机上 3 基本配置3.1 网络连接方式3.2 共享文件夹3.3 设置显存大小 0 背景 首先说说Ubuntu系统&#xff0c;或者更普遍一点&#xff0c;Linux系统究竟有什么…

Java项目学习(员工管理)

新增、员工列表、编辑员工整体代码流程与登录基本一致。 1、新增员工 RestController RequestMapping("/admin/employee")EmployeeController 类中使用了注解 RestController 用于构建 RESTful 风格的 API&#xff0c;其中每个方法的返回值会直接序列化为 JSON 或…

Mirillis Action v4 解锁版安装教程(专业高清屏幕录像软件)

前言 Mirillis Action!&#xff08;暗神屏幕录制软件&#xff09;专业高清屏幕录像软件&#xff0c;被誉为游戏视频三大神器之一。这款屏幕录制软件和游戏录制软件&#xff0c;拥有三大硬件加速技术&#xff0c;支持以超高清视频画质录制桌面和实况直播&#xff0c;超清视频画…