Android实践开发制作小猴子摘桃小游戏
Android实践制作小猴子摘桃小游戏
实践素材项目源文件获取:Android可能存在版本差异项目如果不能正确运行,可以使用里面的素材自己构建项目Android实践制作小猴子摘桃小游戏Android实践制作小猴子摘桃小游戏
https://mp.weixin.qq.com/s/jNU_hVfj9xklsilEubBtdQ
一、实验目的
1.熟练掌握Activity的创建、配置、启动和关闭;
2.掌握Activity之间的跳转;
3.掌握Activity之间的数据传递。
二、实验内容
为了更好地掌握Activity之间的数据回传知识,本小节我们将通过一个小猴子摘桃的案例来演示Activity之间是如何进行数据回传。
三、仪器设备
1.实验环境:Android Studio开发工具。
2.设备:计算机。
四、实验步骤
(一)搭建首页界面布局
在小猴子摘桃的程序中显示2个界面,分别是首页界面和桃园界面,此处我们先搭建首页界面。首页界面主要用于展示小猴子图片、“去桃园”按钮、桃子图片和一共摘到的桃子个数。搭建首页界面布局的具体步骤如下所示。
(1)创建程序
创建一个名为PickPeach的应用程序,指定包名为cn.itcast.pickpeach。
(2)导人界面图片
将首页界面所需要的图片bg.png、monkey.png、bin_peach.png、peach_pic.png导人程序中创建的drawable-hdpi文件夹中。
(3)放置界面控件
在actvity_main.xml布局文件中,放置2个TextView控件分别用于显示界面标题与摘到的桃子个数;放置2个ImageView控件分别用于显示小猴子图片和桃子图片;放置1个Button控件用于显示“去桃园”按钮。
(4)去掉默认标题栏
由于程序创建后界面上会有一个默认的标题栏,该标题栏不够美观,所以需要在AndroidManifest.xml文件的<application>标签中修改teme属性的值为“@style/Theme.AppCompat.NoActionBar”,去掉默认标题栏。
(二)搭建桃园界面布局
点击首页界面中的“去桃园”按钮,程序会跳转到桃园界面,该界面主要用于展示一棵桃树、桃树上结的6个桃子和“退出桃园”按钮。搭建桃园界面布局的具体步骤如下所示。
(1)创建桃园界面
在cn.itcast.pickpeach包中创建一个PeachActivity,并将布局文件名指定为activity_peach。
(2)导人界面图片
将桃园界面所需要的图片tree_bg.png与tree.png导入程序的drawable-hdpi文件夹中。
(3)放置界面控件
在activity_peach.xml布局文件中,放置1个TextView控件用于显示界面标题;放置7个Button控件分别用于显示桃树上结的6个桃子与“退出桃园”按钮。
(三)实现小猴子摘桃的功能
当进入小猴子摘桃的程序时,首先会显示首页界面,该界面主要用于显示小猴子摘到的桃子个数。点击首页界面中的“去桃园”按钮,程序会跳转到桃园界面。在该界面显示一棵桃树,树上结了6个桃子,每点击一个桃子,程序就会通过Toast类提示用户摘到一个桃子,并且被点击的桃子会被隐藏掉,摘到的桃子个数会加1。当点击桃园界面的“退出桃园”按钮或设备上的返回键时,程序会调用 setResult()方法将摘到的桃子个数回传到首页界面并进行显示。实现小猴子摘桃功能的具体步骤如下所示:
(1)实现首页界面的显示效果
由于首页界面需要显示摘到的桃子个数与实现“去桃园”按钮的点击事件,所以需要在MainActivity中创建一个imit()方法用于获取界面控件并实现“去桃园”按钮的点击事件,同时还需要重写onActivityResult()方法,该方法用于获取桃园界面回传过来的桃子个数。
(2)实现桃园界面的摘桃效果
由于桃园界面需要实现6个桃子与1个“退出桃园”按钮的点击事件,所以需要用PeachActivity实现OnClickListener接口,并重写onClick()方法,在该方法中实现界面上7个按钮的点击事件。
(四)运行程序
实验知识:
Activity之间进行数据回传时包含3个方法,分别是startActivityForResult()方法、setResult()方法和onActivityResult()方法。
(1) startActivityForResult()方法
用于开启一个Activity,当开启的Activity销毁时,会从销毁的Activity中返回数据。

(2)setResult() 方法
用于携带数据进行回传,该方法的语法格式如下:

(3)onActivityResult()方法
用于接收回传的数据,该方法的语法格式如下:

程序会根据传递的参数requestCode与resultCode来识别数据的来源。
本次实践内容相对简单易操作适合新手,如果实验中有什么问题也可以留言。



注意:创建peachActivity.java文件时安装这样的步骤,省去在清单配置文件配置的麻烦。同时自动生成activity_peach.xml文件

activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="50dp"android:background="#008577"android:gravity="center"android:text="首页"android:textColor="@android:color/white"android:textSize="20sp" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg"android:gravity="center_vertical"><ImageViewandroid:id="@+id/iv_monkey"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/monkey" /><Buttonandroid:id="@+id/btn_peach"android:layout_width="80dp"android:layout_height="30dp"android:layout_marginLeft="30dp"android:layout_marginTop="20dp"android:layout_toRightOf="@id/iv_monkey"android:background="@drawable/btn_peach"android:text="去桃园"android:textColor="@android:color/black" /><ImageViewandroid:id="@+id/iv_peach"android:layout_width="45dp"android:layout_height="35dp"android:layout_centerHorizontal="true"android:layout_marginTop="80dp"android:src="@drawable/peach_pic" /><TextViewandroid:id="@+id/tv_count"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="85dp"android:layout_toRightOf="@id/iv_peach"android:text="摘到0个"android:textColor="@android:color/black"android:textSize="16sp" /></RelativeLayout> </LinearLayout>

activity_peach.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="50dp"android:background="#008577"android:gravity="center"android:text="首页"android:textColor="@android:color/white"android:textSize="20sp" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg"android:gravity="center_vertical"><ImageViewandroid:id="@+id/iv_monkey"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/monkey" /><Buttonandroid:id="@+id/btn_peach"android:layout_width="80dp"android:layout_height="30dp"android:layout_marginLeft="30dp"android:layout_marginTop="20dp"android:layout_toRightOf="@id/iv_monkey"android:background="@drawable/btn_peach"android:text="去桃园"android:textColor="@android:color/black" /><ImageViewandroid:id="@+id/iv_peach"android:layout_width="45dp"android:layout_height="35dp"android:layout_centerHorizontal="true"android:layout_marginTop="80dp"android:src="@drawable/peach_pic" /><TextViewandroid:id="@+id/tv_count"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="85dp"android:layout_toRightOf="@id/iv_peach"android:text="摘到0个"android:textColor="@android:color/black"android:textSize="16sp" /></RelativeLayout> </LinearLayout>

MainActivity.java
package com.example.ssjun.experiment4;import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btu_peach;private TextView tv_count;private int totalCount=0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}private void init() {btu_peach =findViewById(R.id.btn_peach);tv_count=findViewById(R.id.tv_count);btu_peach.setOnClickListener(this);}@Overridepublic void onClick(View v) {Intent intent =new Intent(MainActivity.this,peachActivity.class);startActivityForResult(intent,1);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);//获取回传的数据if(requestCode==1&&resultCode==1){int count=data.getIntExtra("count",0);totalCount=totalCount+count;//接受数量tv_count.setText("摘到"+totalCount+"个");}}
}
peachActivity.java
package com.example.ssjun.experiment4;import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;public class peachActivity extends AppCompatActivity implements View.OnClickListener {private Button btn_1,btn_2,btn_3,btn_4,btn_5,btn_6,btn_exit;private int count=0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_peach);btn_1=findViewById(R.id.btn_one);btn_2=findViewById(R.id.btn_two);btn_3=findViewById(R.id.btn_three);btn_4=findViewById(R.id.btn_four);btn_5=findViewById(R.id.btn_five);btn_6=findViewById(R.id.btn_six);btn_exit=findViewById(R.id.btn_exit);btn_1.setOnClickListener(this);btn_2.setOnClickListener(this);btn_3.setOnClickListener(this);btn_4.setOnClickListener(this);btn_5.setOnClickListener(this);btn_6.setOnClickListener(this);btn_exit.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.btn_one:info(btn_1);break;case R.id.btn_two:info(btn_2);break;case R.id.btn_three:info(btn_3);break;case R.id.btn_four:info(btn_4);break;case R.id.btn_five:info(btn_5);break;case R.id.btn_six:info(btn_6);break;case R.id.btn_exit:returnData();break;}}//设置按钮的点击事件处理private void info(Button btn){count++;btn.setVisibility(View.INVISIBLE);Toast.makeText(peachActivity.this, "摘到"+count+"个桃子", Toast.LENGTH_SHORT).show();}private void returnData(){Intent intent =new Intent();intent.putExtra("count",count);setResult(1,intent);peachActivity.this.finish();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0){//调用数据回传方法returnData();}return false;}
}
相关文章:
Android实践开发制作小猴子摘桃小游戏
Android实践制作小猴子摘桃小游戏 实践素材项目源文件获取:Android可能存在版本差异项目如果不能正确运行,可以使用里面的素材自己构建项目Android实践制作小猴子摘桃小游戏Android实践制作小猴子摘桃小游戏https://mp.weixin.qq.com/s/jNU_hVfj9xklsil…...
springboot整合couchbase(集群)
springboot整合couchbase 1、Couchbase1.1、介绍1.2、Bucket1.3、Couchbase SDK 2、(key,value)写入couchbase集群2.1、总体图2.2、依赖2.3、CouchbaseConfig 配置文件2.4、代码使用 1、Couchbase 1.1、介绍 1.2、Bucket 在 Couchbase 中,bucket 是一个重要的概念…...
VsCode启用右括号自动跳过(自动重写) - 自录制gif演示
VsCode启用右括号自动跳过(自动重写) - 自录制gif演示 前言 不知道大家在编程时候的按键习惯是怎样的。输入完左括号后编辑器一般会自动补全右括号,输入完左括号的内容后,是按→跳过右括号还是按)跳过右括号呢? for (int i 0; i < a.s…...
[Linux]在vim中批量注释与批量取消注释
1.在vim中批量注释的步骤: 1.在normal模式下按Ctrl v ,进入V-BLOCK模式 2.按 J 键 或 K 键选择要注释的内容,J向上K向下 我们给第5,6,7行进行注释 3.按住shift i进入插入模式,输入 // 4.点击ESC键&…...
NC,GFS、ICON 数据气象信息可视化--降雨量的实现
随着气象数据的快速发展和应用,气象信息的可视化成为了一项不可或缺的技术手段。它不仅能帮助气象专家快速解读数据,还能为公众提供直观的天气预报信息。今天,我们将从降雨量的可视化出发,带大家一起了解如何实现气象数据的可视化…...
LLM之RAG实战(五十二)| 如何使用混合搜索优化RAG 检索
在RAG项目中,大模型生成的参考内容(专业术语称为块)来自前一步的检索,检索的内容在很大程度上直接决定了生成的效果,因此检索对于RAG项目至关重要,最常用的检索方法是关键字搜索和语义搜索。本文将分别介绍…...
探索Scala基础:融合函数式与面向对象编程的强大语言
Scala作为一门在现代编程领域备受瞩目的编程语言,融合了函数式编程和面向对象编程的特性,运行于Java虚拟机(JVM)之上,与Java有着良好的互操作性。它简洁、高效且表达力强,适用于各种规模和类型的软件开发项…...
Selenium文件上传
在 Web 自动化测试中,文件上传是一项常见的任务。不同的网站和前端技术可能导致上传方式有所不同,因此需要采用不同的方法进行处理。 方法 1:使用 send_keys() 直接上传(最常用) 适用场景: 页面中 有标准的 <input type="file"> 标签。 不需要弹出 Wind…...
Java多线程与高并发专题——Condition 和 wait/notify的关系
引入 上一篇关于Condition,我们对Condition有了进一步了解,在之前生产/消费者模式一文,我们讲过如何用 Condition 和 wait/notify 来实现生产者/消费者模式,其中的精髓就在于用Condition 和 wait/notify 来实现简易版阻塞队列&am…...
mysql-分区和性能
mysql自身只支持表的横向分区。 常听到开发人员说“”对表做个分区“,然后数据的查询就会快了。这是真的吗?实际上可能跟根本感觉不到查询速度的提升,甚至会发现查询速度急剧下降。因此,在合理使用分区之前,必须了解分…...
使用matlab进行分位数回归
对于使用MATLAB、R语言或者STATA执行带有虚拟变量的分位数回归,这三个工具都带有强大的分析功能。在核心观点上,首先需要理解分位数回归的基本原理、其次要掌握如何在各个统计软件中实现该分析、最后,需要熟悉虚拟变量在模型中的应用并合理加…...
[操作系统,学习记录]3.进程(2)
1.fork(); 玩法一:通过返回值if,else去执行不同的代码片段 玩法二:if,else然后调用execve函数去执行新的程序 2.进程终止: 退出码,子进程通过exit/return返回,父进程wait/waitpid等待而得&am…...
26考研——排序_选择排序_选择排序的基本思想 简单选择排序(8)
408答疑 文章目录 四、选择排序选择排序的基本思想简单选择排序定义算法思想性能分析空间效率时间效率稳定性 适用性 九、参考资料鲍鱼科技课件26王道考研书 四、选择排序 选择排序的基本思想 每一趟(如第 i i i 趟)在剩下 n − i 1 n-i1 n−i1&…...
StarRocks BE宕机排查
StarRocks BE宕机排查 排查是否OOM dmesg -T|grep -i oom #排查是否oom原因: 2.X版本OOM原因 BE 的配置文件 (be.conf) 中 mem_limit 配置不合理,需要配置mem_limit(机器总内存-其他服务占用内存-1~2g(系统预留)) 比如机器内存40G,上面有…...
PPT——组合SCI论文图片
SCI论文中对于图的排版常常是最头疼的事情,通常需要几个图组合在一起,并且如何控制图中的字体一致也是麻烦事。 保持这个大图里面的一致,转头一看跟其他图又不一致了。最近跟我的博导学了一手,今天就来记录一下吧。主要用到的软件…...
Tabby 一:如何在Mac配置保姆级教程(本地模型替换hugging face下载)
1. brew安装 mac需要先安装brew,如果本地已经安装过brew这一步可以忽略,遇到问题可以自己ai问 /bin/bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 可能遇到source .zprofile失败,因为…...
03 相机标定图像采集
学完本文,您将获取一下技能: 1:如何提升标定质量,如选择标定板,标定图像采集的注意事项, 2:实现标定图像自动筛选的代码 3:量产场景如何通过一张图像来标定相机 为了实现良好的标定效果,以下因素在标定数据采集前必须设置得当。 标定板选择 标定板尺寸准确材料平…...
CentOS 安装LAMP全过程 - 完整步骤与最佳实践
在开始搭建 LAMP 环境之前,需要确保系统已经满足以下条件: 1、操作系统:CentOS 7 或 CentOS 8 2、网络连接:系统必须能够访问互联网以下载所需的软件包 3、权限:需要 root 权限或者通过sudo 提权执行命令 先更新系…...
基于DCT变换和Huffman编码的图像压缩解压缩算法matlab性能仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 DCT变换 4.2 Huffman编码的数学原理 4.3 图像压缩流程 4.4 仿真测试指标 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a/matl…...
Vue下 Sortable 实现 table 列表字段可拖拽排序,显示隐藏组件开发
vue 开发table 列表时,需要动态调整列字段的顺序和显示隐藏 实现效果如图所示: vue 组件代码 <template><div style"width: 90%; margin: 0 auto;"><el-table :data"tableData" border"" ref"table…...
李飞飞、吴佳俊团队新作:FlowMo如何以零卷积、零对抗损失实现ImageNet重构新巅峰
目录 一、摘要 二、引言 三、相关工作 四、方法 基于扩散先前的离散标记化器利用广告 架构 阶段 1A:模式匹配预训练 阶段 1B:模式搜索后训练 采样 第二阶段:潜在生成建模 五、Coovally AI模型训练与应用平台 六、实验 主要结果 …...
.js项目编译成.exe程序(交叉编译全过程整理)
1.前提: (这个文档有配套的视频解说教程,大家想看的话, 直接在 blibli搜索 , 尘埃落在星河湾 这个up主, 将vtk.js打包成.exe实录课程_哔哩哔哩_bilibili ) 先将下载库的环境搭建好: 打开编辑配置文件,下面代码依次执行 npm config edit registryhttps://registry.npmmirror.com…...
Android面试总结之Handler 机制深入探讨原理、应用与优化
1.使用过Handler吗?Handler是用来干嘛的? 答:使用过,Handler是android中设计的用于线程间通信的工具类,针对单个Handler对象而言,与其关联的有Message,MessageQueue和Looper,其中Me…...
OpenAI 推出图像生成新突破:GPT-4o 实现图像编辑对话化
关键要点 OpenAI 推出了 4o 图像生成功能,集成于 GPT-4o,提供精准且逼真的图像生成。 它似乎适用于多种用户,包括免费用户,API 访问预计几周内推出。 安全措施包括 C2PA 元数据和内容屏蔽,限制生成不适当图像。 研究…...
android11关机安卓充电的UI定制化
引言 首先上一张安卓充电的图片: 安卓关机状态下有两种充电模式:uboot-charge和android-charge,可通过dts配置使用哪一种充电模式。 dts配置中uboot-charge和android-charge是互斥的,如下配置的是开启android-charge:…...
Web前端之JavaScript的DOM操作冷门API
MENU 前言1、Element.checkVisibility()2、TreeWalker3、Node.compareDocumentPosition()4、scrollIntoViewIfNeeded()5、insertAdjacentElement()6、Range.surroundContents()7、Node.isEqualNode()8、document.createExpression()小结 前言 作为前端开发者,我们每…...
惠普(HP)和联想(Lenovo)作为全球两大电脑品牌,并不是简单的“拼接电脑”
惠普(HP)和联想(Lenovo)作为全球两大电脑品牌,并不是简单的“拼接电脑”,它们都有自己的核心技术、专利设计和生态体系。以下是它们“自己的”核心部分: 1. 关键自研技术 品牌自研技术/专利说明…...
集成开发环境革新:IntelliJ IDEA与Cursor AI的智能演进
集成开发环境革新:IntelliJ IDEA 与 Cursor AI 的智能演进 集成开发环境(IDE) 是软件开发者必不可少的工具。一个优秀的 IDE 不仅能够帮助编写和调试代码,还能集成版本控制和代码优化等多种功能。如今,随着人工智能&a…...
EXCEL报错:无法共享此工作薄,因表包含excel表或xml映射的解决方法
在分享工作薄是,如果出现了“无法共享此工作薄,因表包含excel表或xml映射”的报错,那么有两个原因: 1.包含Excel表格,这个也是相对比较常见的原因。 首先选中表格。如果你不知道表的位置在哪,那么在Excel左…...
《深度剖析SQL之WHERE子句:数据过滤的艺术》
在当今数据驱动的时代,数据处理和分析能力已成为职场中至关重要的技能。SQL作为一种强大的结构化查询语言,在数据管理和分析领域占据着核心地位。而WHERE子句,作为SQL中用于数据过滤的关键组件,就像是一把精准的手术刀,…...
