Android—幸运抽奖火箭发射倒计时(第六次作业)

Android—幸运抽奖&&点火发射(第六次作业)

创建项目

image-20231110114708197

准备工作

修改按钮的颜色,如果不修改这行代码,那么后期给按钮添加background属性的时候,按钮并不会发生变化。

image-20231110114553928

设置按钮的样式文件btn_press_blue.xml,设置了按压效果

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true">     <!--按压--><shape><solid android:color="#0082FF"/><corners android:radius="10dp"/></shape></item><item android:state_pressed="false"><shape><solid android:color="@color/blue"/><corners android:radius="10dp"/></shape></item>
</selector>

其中蓝色的我选择的RGB是#FF7BBAF7

<color name="blue">#FF7BBAF7</color>

幸运抽奖

幸运⼤抽奖。⽤户单击“开始抽奖”Button后启动线程,开始抽奖过程,在界⾯上随机出现抽奖名单。用户点击”揭晓大奖“Button后,终止线程运行。

image-20231110142546147

左侧为项目结构,红色方框为新增内容或者修改的内容,右侧简单展示上述准备工作中的局部代码。

布局文件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"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/btn_start"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="开始抽奖了"android:textSize="20sp"android:background="@drawable/btn_press_blue"android:layout_margin="5dp"/><Buttonandroid:id="@+id/btn_stop"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="揭晓大奖"android:textSize="20sp"android:background="@drawable/btn_press_blue"android:layout_margin="5dp"/></LinearLayout><TextViewandroid:id="@+id/label"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="100dp"android:textSize="40sp"android:gravity="center"android:layout_gravity="center_horizontal"android:textColor="@color/blue"/><TextViewandroid:id="@+id/information"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="150dp"android:textSize="20sp"android:gravity="center"android:layout_gravity="center_horizontal"android:textColor="@color/blue"android:text="WeiComp 计科20xx 20200707xxxx 制作"/></LinearLayout>

image-20231110144647839

  1. 创建RandomService的java文件

    package com.example.servicedemo;public class RandomService extends Service {	//导包的时候导入android.app.Serviceprivate Thread luckThread;@Overridepublic void onCreate() {super.onCreate();Toast.makeText(this, "幸运大抽奖开始", Toast.LENGTH_SHORT).show();luckThread = new Thread(null, backgroundWork, "luckThread");}@Overridepublic void onStart(Intent intent, int startId) {super.onStart(intent, startId);Toast.makeText(this, "抽奖进行中", Toast.LENGTH_SHORT).show();if (!luckThread.isAlive()) {luckThread.start();}}@Overridepublic void onDestroy() {super.onDestroy();Toast.makeText(this, "恭喜你中奖了", Toast.LENGTH_SHORT).show();luckThread.interrupt();}@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}private Runnable backgroundWork = new Runnable() {@Overridepublic void run() {try {while (!Thread.interrupted()) {int randomDouble = (int) Math.round(Math.random() * 2 + 1);int randomDouble1 = (int) Math.round(Math.random() * 2);int randomDouble2 = (int) Math.round(Math.random() * 9);MainActivity.UpdateGUI(randomDouble, randomDouble1, randomDouble2);Thread.sleep(1000);if (randomDouble1 == randomDouble2 && randomDouble1 == 0) {luckThread.interrupt();}}} catch (InterruptedException e) {e.printStackTrace();}}};
    }
    
  2. MainAcitivty.java函数

    package com.example.servicedemo;public class MainActivity extends AppCompatActivity {private Button btn_start, btn_stop;private static Handler handler = new Handler();private static TextView labelView = null;private static int randomDouble, randomDouble1, randomDouble2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn_start = findViewById(R.id.btn_start);btn_stop = findViewById(R.id.btn_stop);labelView = findViewById(R.id.label);handler = new Handler();final Intent serviceIntent = new Intent(this, RandomService.class);btn_start.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {startService(serviceIntent);}});btn_stop.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {stopService(serviceIntent);handler.post(RefreshLable);}});}@Overridepublic void onDestroy() {super.onDestroy();MainActivity.UpdateGUI(randomDouble, randomDouble1, randomDouble2);Toast.makeText(this, "恭喜你中奖了", Toast.LENGTH_SHORT).show();}public static void UpdateGUI(int refreshDouble, int refreshDouble1, int refreshDouble2) {randomDouble = refreshDouble;randomDouble1 = refreshDouble1;randomDouble2 = refreshDouble2;handler.post(RefreshLable);}private static Runnable RefreshLable = new Runnable() {@Overridepublic void run() {labelView.setText(String.valueOf("20200707" + randomDouble +randomDouble1 +randomDouble2));}};
    }
    
  3. 修改AndroidManifest.xml代码(确保将服务的启动和停止操作正确注册在 AndroidManifest.xml 中。)

    <application>...<serviceandroid:name=".RandomService"android:enabled="true"android:exported="false" />...
    </application>
    

    image-20231110145128774

效果图

image-20231110144517588

火箭发射倒计时

使用Timer实现火箭倒计时功能。(参照例6-6)请在界面适当的位置添加个人信息,如姓名或拼音,以防止作业雷同。上传代码及模拟器图片。

【例6-6】火箭点火倒计时。在UI界面上设计一个TextView和一个Button。当用户点击Button时,启动Timer工作,在TextView上显示10至1的倒计时数字,数字每秒变化一次。当显示到1后,TextView上显示“点火成功”。

布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="10dp"><TextViewandroid:id="@+id/textview"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="100dp"android:textSize="40sp"android:textColor="@color/blue"android:gravity="center" /><Buttonandroid:id="@+id/button"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/btn_press_blue"android:text="点火发射"android:textSize="25sp"android:textColor="@color/white"android:layout_centerInParent="true" /><TextViewandroid:id="@+id/information"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="500dp"android:textSize="20sp"android:gravity="center"android:layout_gravity="center_horizontal"android:textColor="@color/blue"android:text="WeiComp 计科20xx 20200707xxxx 制作"/></RelativeLayout>

image-20231110151933448

MainActivity.java

package com.example.timerdemo;public class MainActivity extends AppCompatActivity {private Button button;private TextView textView;private Timer timer;private TimerTask timerTask;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = findViewById(R.id.textview);button = findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startTimer();}});}private void startTimer() {timer = new Timer();timerTask = new TimerTask() {int i = 10; //倒计时数目@Overridepublic void run() {Message message = Message.obtain();message.what = i;handler.sendMessage(message);i--;}};timer.schedule(timerTask, 1000, 1000);}@SuppressLint("HandlerLeak")private Handler handler = new Handler() {@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);if (msg.what > 0) {textView.setText(" " + msg.what);} else {// 在handler里可以更改UI组件textView.setText("点火成功");timer.cancel();}}};
}

运行结果

image-20231110151843564

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络课后作业2023秋

计算机网络第三版吴功宜版 课后作业 第一章作业三、计算与问答3.73.8 第二章作业三、计算与问答3.23.53.6 第三章作业三、计算与问答3.13.53.73.8 第四章作业三、计算与问答3.13.2 第五章作业三、计算与问答3.13.33.4VLAN交换机模式模式切换重置交换机VLA&#xff2e;配置命令其…

基础大模型的结构特性与发展

摘要&#xff1a; 基础大模型的结构特性是什么给予的&#xff1f;在建模部分&#xff0c;我们将探索基础模型背后的底层架构&#xff0c;并确定5个关键属性。 首先&#xff0c;我们从讨论计算模型的表现力开始-捕获和吸收真实世界的信息&#xff0c;以及可扩展性-熟练地处理大量…

NFS文件系统共享服务器实战

架设一台NFS服务器&#xff0c;并按照以下要求配置 准备 两台Linux虚拟机一台作为服务端server&#xff0c;一台作为客户端client server IPV4&#xff1a;192.168.110.136/24 client IPV4&#xff1a;192.168.110.134/24 两台服务器都需要关闭防火墙和seLinux 服…

Clickhouse学习笔记(13)—— Materialize MySQL引擎

该引擎用于监听 binlog 事件&#xff0c;类似于canal、Maxwell等组件 ClickHouse 20.8.2.3 版本新增加了 MaterializeMySQL 的 database 引擎&#xff0c;该 database 能映射到 MySQL中的某个database &#xff0c;并自动在ClickHouse中创建对应ReplacingMergeTree。 ClickHous…

k8s 1.28.3 使用containerd

文章目录 环境说明最终结果环境配置时钟同步 主机名称配置主机名解析关闭swap安装ipvs 安装containerd安装containerd生成配置修改配置开启containerd服务 安装runc安装k8s安装kubelet kubeadm kubectl获取kubernetes 1.28组件容器镜像 拉取镜像初始化集群方法一&#xff08;不…

postman上传照片,视频,音频等上传文件操作测试方法

Postman上传照片&#xff0c;视频&#xff0c;音频等上传文件操作测试方法 新建一个request&#xff0c;更改请求方式&#xff0c;点击Body 勾选form-data ,key后面下拉框选择File 上一步勾选后Value即出现选择本地文件按钮&#xff0c;填写Key&#xff0c;选择文件即可 此时…

如何显示标注的纯黑mask图

文章目录 前言一、二分类mask显示二、多分类mask显示 前言 通常情况下&#xff0c;使用标注软件标注的标签图看起来都是纯黑的&#xff0c;因为mask图为单通道的灰度图&#xff0c;而灰度图一般要像素值大于128后&#xff0c;才会逐渐显白&#xff0c;255为白色。而标注的时候…

Docker的安装配置与使用

1、docker安装与启动 首先你要保证虚拟机所在的盘要有至少20G的空间&#xff0c;因为docker开容器很吃空间的&#xff0c;其次是已经安装了yum依赖 yum install -y epel-release yum install docker-io # 安装docker配置文件 /etc/sysconfig/docker chkconfig docker on # 加…

【unity插件】UGUI的粒子效果(UI粒子)—— Particle Effect For UGUI (UI Particle)

文章目录 前言插件地址描述特征Demo 演示如何玩演示对于 Unity 2019.1 或更高版本对于 Unity 2018.4 或更早版本 用法基本上是用法使用您现有的 ParticleSystem 预制件带 Mask 或 RectMask2D 组件脚本用法UIParticleAttractor 组件开发说明常见问题解答&#xff1a;为什么我的粒…

c语言:解决谁是凶手的问题。

题目&#xff1a; 思路&#xff0b;代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS //假设全部人说的话都为真&#xff0c;那结果就为4&#xff0c;现在已知三真一假&#xff0c;且说假话的人为凶手 // 现在将全部情况相加&#xff0c;满足三真一假的情况即为凶手。 #incl…

【JVM】Java内存溢出分析(堆溢出、栈溢出、方法区溢出、直接内存溢出)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

十年软件测试老程序告诉你性能测试的左移右移到底能干嘛

常规的性能测试一般都是在测试阶段集成测试时候才开始介入&#xff0c;很容易测试时间不够&#xff0c;可不可以借鉴测试左移右移的思路&#xff0c;更早的介入和发现性能风险&#xff0c;然后在测试阶段更专注于分析优化&#xff1f; 借着这个问题&#xff0c;结合自己的实践…

C语言从文件 D://test.txt 读取字符串,将字符串中所有的大写字符改为小写字母并写回到源文件中

完整代码&#xff1a; /*从文件 D://test.txt 读取字符串&#xff0c;将字符串中所有的大写字母改为小写字母并写回 到源文件中*/ #include<stdio.h>//将字符串中所有的大写字母改为小写字母 void func(char *buff){while (*buff!\0){if (*buff>A&&*buff<…

信息检索与数据挖掘 | 【实验】检索评价指标MAP、MRR、NDCG

文章目录 &#x1f4da;实验内容&#x1f4da;知识梳理&#x1f4da;实验步骤&#x1f407;前情提要&#x1f407;MAP评价指标函数&#x1f407;MRR 评价指标函数&#x1f407;NDCG评价指标函数&#x1f407;调试结果 &#x1f4da;实验内容 实现以下指标评价&#xff0c;并对…

打印字符(C++)

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

NSSCTF第12页(1)

[FSCTF 2023]细狗2.0 应该是和[HUBUCTF 2022 新生赛]ezsql搞混掉了 点击按钮出现了 发现输入什么回显什么 伪协议也不行 看源代码发现了这个玩意 输入了1;发现了其他回显 ls 发现了两个文件 发现被限制了 不知道是cat还是空格 绕过 直接找吧还是 得到flag [SCTF 2021]loginm…

电商平台api接口对接电商数据平台,获取商品详情页面实时信息须知

随着互联网的发展和普及&#xff0c;电商平台已成为人们日常生活中不可或缺的一部分。而为了保证电商平台的正常运行&#xff0c;平台与开发者之间需要进行数据交互&#xff0c;这便涉及到了电商平台API接口对接的问题。本文将详细介绍电商平台API接口对接的须知事项。 一、了解…

《AI超级个体:ChatGPT与AIGC实战指南 》书籍分享

前言 ChatGPT是一款通用人工智能&#xff08;AI&#xff09;工具&#xff0c;使用过它的人都能感受到它的魅力。AI并不是一个新事物&#xff0c;它在全世界都发展很多年了&#xff0c;但在ChatGPT诞生之前&#xff0c;我们的AI只能算垂直AI&#xff0c;比如AlphaGo&#xff0c…

jenkins分步式构建环境(agent)

rootjenkins:~# netstat -antp|grep 50000 tcp6 0 0 :::50000 ::&#x1f617; LISTEN 5139/java 1.52 安装Jenkins rootubuntu20:~# dpkg -i jenkins_2.414.3_all.deb 配置各种类型的Agent的关键之处在于启动Agent的方式 ◼ JNLP Agent对应着“通过Java Web启动代理”这种方…

【电路笔记】-诺顿定理(Norton‘s Theorem)

诺顿定理&#xff08;Norton’s Theorem&#xff09; 文章目录 诺顿定理&#xff08;Nortons Theorem&#xff09;1、概述与定义2、诺顿模型确定3、一些线性电路的诺顿模型3.1 单电压源3.2 单电流源3.3 多电流/电压源 5、总结 本文是我们上一篇有关戴维南定理的文章的延续。 在…