Android : 篮球记分器app _简单应用

示例图:

1.导包 在build.gradle 中 加入

    // 使用androidx版本库implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha03'

2. 开启dataBinding

android{...// 步骤1.开启data bindingdataBinding {enabled = true}...}

3.写个类继承 ViewModel

package com.example.mydatabindingtest;import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;public class MyViewModel extends ViewModel {private MutableLiveData<Integer> redNumb;private MutableLiveData<Integer> greenNumb;//回滚 用于记录前面一次的值private int redBack,greenBack;public MutableLiveData<Integer> getRedNumb() {if (redNumb == null) {redNumb = new MutableLiveData<>();redNumb.setValue(0);}return redNumb;}public MutableLiveData<Integer> getGreenNumb() {if (greenNumb == null) {greenNumb = new MutableLiveData<>();greenNumb.setValue(0);}return greenNumb;}public void redAdd(int num) {//添加之前保留之前的值 都记录下redBack = redNumb.getValue();greenBack = greenNumb.getValue();redNumb.setValue(getRedNumb().getValue() + num);}public void greenAdd(int num) {//添加之前保留之前的值 都记录下redBack = redNumb.getValue();greenBack = greenNumb.getValue();greenNumb.setValue(getGreenNumb().getValue() + num);}//重置public void reset(){//添加之前保留之前的值greenBack = greenNumb.getValue();redBack = redNumb.getValue();redNumb.setValue(0);greenNumb.setValue(0);}//撤销一次public void rollBack(){//把记录的值设置到变量中redNumb.setValue(redBack);greenNumb.setValue(greenBack);}
}

4.更改布局 activity_main.xml

<?xml version="1.0" encoding="utf-8"?><!-- 步骤2. 点击小灯泡生成新的xml 或者自己更改 -->
<layout 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"><data><variablename="data"type="com.example.mydatabindingtest.MyViewModel" /></data><androidx.constraintlayout.widget.ConstraintLayoutandroid:id="@+id/btn_add1"android:layout_width="match_parent"android:layout_height="match_parent"><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline22"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.45" /><Buttonandroid:id="@+id/btn_green_add3"style="@style/Widget.AppCompat.Button"android:layout_width="0dp"android:layout_height="wrap_content"android:background="#00FFE7"android:onClick="@{() -> data.greenAdd(3)}"android:scrollbarThumbHorizontal="@null"android:scrollbarThumbVertical="@null"android:text="@string/text_add3"android:textColor="#0288D1"android:textColorHighlight="@null"android:textColorHint="@null"android:textColorLink="@null"android:textSize="30sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/guideline16"app:layout_constraintEnd_toStartOf="@+id/guideline19"app:layout_constraintStart_toStartOf="@+id/guideline9"app:layout_constraintTop_toTopOf="@+id/guideline15"tools:ignore="DuplicateSpeakableTextCheck,VisualLintButtonSize" /><Buttonandroid:id="@+id/btn_red_add1"style="@style/Widget.AppCompat.Button"android:layout_width="0dp"android:layout_height="wrap_content"android:background="#FFff0000"android:onClick="@{() -> data.redAdd(1)}"android:scrollbarThumbHorizontal="@null"android:scrollbarThumbVertical="@null"android:text="@string/text_add1"android:textColor="@color/white"android:textColorHighlight="@null"android:textColorHint="@null"android:textColorLink="@null"android:textSize="30sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/guideline14"app:layout_constraintEnd_toStartOf="@+id/guideline22"app:layout_constraintStart_toStartOf="@+id/guideline18"app:layout_constraintTop_toTopOf="@+id/guideline13"app:layout_constraintVertical_bias="0.52"tools:ignore="DuplicateSpeakableTextCheck,VisualLintButtonSize" /><Buttonandroid:id="@+id/btn_green_add1"style="@style/Widget.AppCompat.Button"android:layout_width="0dp"android:layout_height="wrap_content"android:background="#00FFE7"android:onClick="@{() -> data.greenAdd(1)}"android:scrollbarThumbHorizontal="@null"android:scrollbarThumbVertical="@null"android:text="@string/text_add1"android:textColor="#0288D1"android:textColorHighlight="@null"android:textColorHint="@null"android:textColorLink="@null"android:textSize="30sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/guideline14"app:layout_constraintEnd_toStartOf="@+id/guideline19"app:layout_constraintStart_toStartOf="@+id/guideline9"app:layout_constraintTop_toTopOf="@+id/guideline13"tools:ignore="VisualLintButtonSize" /><Buttonandroid:id="@+id/btn_green_add2"style="@style/Widget.AppCompat.Button"android:layout_width="0dp"android:layout_height="wrap_content"android:background="#00FFE7"android:onClick="@{() -> data.greenAdd(2)}"android:scrollbarThumbHorizontal="@null"android:scrollbarThumbVertical="@null"android:text="@string/text_add2"android:textColor="#0288D1"android:textColorHighlight="@null"android:textColorHint="@null"android:textColorLink="@null"android:textSize="30sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/guideline15"app:layout_constraintEnd_toStartOf="@+id/guideline19"app:layout_constraintStart_toStartOf="@+id/guideline9"app:layout_constraintTop_toTopOf="@+id/guideline14"tools:ignore="DuplicateSpeakableTextCheck,VisualLintButtonSize" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline9"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.55" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline10"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.05" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline11"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.1504788" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline13"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.35" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline14"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.45" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline15"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.55" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline16"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.65" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline17"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.75" /><TextViewandroid:textColor="@color/white"android:gravity="center"android:id="@+id/textView"android:layout_width="0dp"android:layout_height="wrap_content"android:background="#FFff0000"android:text="@string/text_A"android:textSize="20sp"app:layout_constraintBottom_toTopOf="@+id/guideline11"app:layout_constraintEnd_toStartOf="@+id/guideline22"app:layout_constraintStart_toStartOf="@+id/guideline18"app:layout_constraintTop_toTopOf="@+id/guideline10" /><TextViewandroid:id="@+id/textView2"android:layout_width="0dp"android:layout_height="wrap_content"android:background="#00FFE7"android:gravity="center"android:text="@string/text_B"android:textColor="#0288D1"android:textSize="20sp"app:layout_constraintBottom_toTopOf="@+id/guideline11"app:layout_constraintEnd_toStartOf="@+id/guideline19"app:layout_constraintStart_toStartOf="@+id/guideline9"app:layout_constraintTop_toTopOf="@+id/guideline10" /><TextViewandroid:id="@+id/text_red"android:layout_width="0dp"android:layout_height="wrap_content"android:gravity="center"android:text="@{String.valueOf(data.redNumb)}"android:textColor="@color/btn_bg"android:textSize="50sp"app:layout_constraintBottom_toTopOf="@+id/guideline13"app:layout_constraintEnd_toStartOf="@+id/guideline22"app:layout_constraintStart_toStartOf="@+id/guideline18"app:layout_constraintTop_toTopOf="@+id/guideline11"app:layout_constraintVertical_bias="0.526" /><TextViewandroid:id="@+id/text_green"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="4dp"android:gravity="center"android:text="@{String.valueOf(data.greenNumb)}"android:textColor="#0288D1"android:textColorHighlight="@null"android:textColorHint="@null"android:textColorLink="@null"android:textSize="50sp"app:layout_constraintBottom_toTopOf="@+id/guideline13"app:layout_constraintEnd_toStartOf="@+id/guideline19"app:layout_constraintHorizontal_bias="1.0"app:layout_constraintStart_toStartOf="@+id/guideline9"app:layout_constraintTop_toTopOf="@+id/guideline11" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline18"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.05" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline19"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.95" /><ImageViewandroid:id="@+id/img_rollback"android:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@string/img_rollback_alt"android:onClick="@{() -> data.rollBack()}"app:layout_constraintBottom_toTopOf="@+id/guideline17"app:layout_constraintEnd_toStartOf="@+id/guideline9"app:layout_constraintHorizontal_bias="0.38"app:layout_constraintStart_toStartOf="@+id/guideline18"app:layout_constraintTop_toTopOf="@+id/guideline16"app:layout_constraintVertical_bias="0.166"app:srcCompat="@drawable/baseline_reply" /><ImageViewandroid:id="@+id/img_reset"android:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@string/img_reset_alt"android:onClick="@{() -> data.reset()}"app:layout_constraintBottom_toTopOf="@+id/guideline17"app:layout_constraintEnd_toStartOf="@+id/guideline19"app:layout_constraintHorizontal_bias="0.521"app:layout_constraintStart_toStartOf="@+id/guideline9"app:layout_constraintTop_toTopOf="@+id/guideline16"app:layout_constraintVertical_bias="0.166"app:srcCompat="@drawable/baseline_cached_24" /><Buttonandroid:id="@+id/btn_red_add2"style="@style/Widget.AppCompat.Button"android:layout_width="0dp"android:layout_height="wrap_content"android:background="#FFff0000"android:onClick="@{() -> data.redAdd(2)}"android:scrollbarThumbHorizontal="@null"android:scrollbarThumbVertical="@null"android:text="@string/text_add2"android:textColor="@color/white"android:textColorHighlight="@null"android:textColorHint="@null"android:textColorLink="@null"android:textSize="30sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/guideline15"app:layout_constraintEnd_toStartOf="@+id/guideline22"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="@+id/guideline18"app:layout_constraintTop_toTopOf="@+id/guideline14"app:layout_constraintVertical_bias="0.48"tools:ignore="VisualLintButtonSize" /><Buttonandroid:id="@+id/btn_red_add3"style="@style/Widget.AppCompat.Button"android:layout_width="0dp"android:layout_height="wrap_content"android:background="#FFff0000"android:onClick="@{() -> data.redAdd(3)}"android:scrollbarThumbHorizontal="@null"android:scrollbarThumbVertical="@null"android:text="@string/text_add3"android:textColor="@color/white"android:textColorHighlight="@null"android:textColorHint="@null"android:textColorLink="@null"android:textSize="30sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/guideline16"app:layout_constraintEnd_toStartOf="@+id/guideline22"app:layout_constraintStart_toStartOf="@+id/guideline18"app:layout_constraintTop_toTopOf="@+id/guideline15"app:layout_constraintVertical_bias="0.56"tools:ignore="VisualLintButtonSize" /></androidx.constraintlayout.widget.ConstraintLayout>
</layout>

5.MainActivity.java

package com.example.mydatabindingtest;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.widget.Toast;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProviders;
import com.example.mydatabindingtest.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity {MyViewModel myViewModel;ActivityMainBinding binding;private long exitTime;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding = DataBindingUtil.setContentView(this,R.layout.activity_main);myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);binding.setData(myViewModel);binding.setLifecycleOwner(this);}//返回@Overridepublic void onBackPressed() {if ((System.currentTimeMillis() - exitTime) > 2000) {Toast.makeText(getApplicationContext(), "再按一次退出程序",Toast.LENGTH_SHORT).show();exitTime = System.currentTimeMillis();} else {super.onBackPressed();}}}

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

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

相关文章

消息中间件之间的区别

一.单机吞吐量 ActiveMQ&#xff1a;万级&#xff0c;吞吐量比RocketMQ和Kafka要低了一个数量级 RabbitMQ&#xff1a;万级&#xff0c;吞吐量比RocketMQ和Kafka要低了一个数量级 RocketMQ&#xff1a;10万级&#xff0c;RocketMQ也是可以支撑高吞吐的一种MQ Kafka&#xff…

Linux服务器部署XXL-JOB

参考文档及下载地址&#xff1a;分布式任务调度平台XXL-JOB 1 从git拉取XXL-JOB代码 我们的大部分变动&#xff0c;是发生在xxl-job-admin&#xff0c;最终将这个模块打包成jar包部署在linux服务器上。 2 执行数据库脚本 doc\db\tables_xxl_job.sql 3 修改pom文件&#xff0c…

Siemens-NXUG二次开发-打开与关闭prt文件[Python UF][20231206]

Siemens-NXUG二次开发-打开与关闭prt文件[Python UF][20231206] 1.python uf函数1.1 NXOpen.UF.Part.Open1.2 NXOpen.UF.Part.LoadStatus1.3 NXOpen.UF.Part.Close1.4 NXOpen.UF.Part.AskUnits 2.示例代码3.运行结果3.1 内部模式3.2 外部模式 1.python uf函数 1.1 NXOpen.UF.P…

CUDA简介——Grid和Block内Thread索引

1. 引言 前序博客&#xff1a; CUDA简介——基本概念CUDA简介——编程模式CUDA简介——For循环并行化 Thread Index&#xff1a; 每个Thread都有其thread index。 在Kernel中&#xff0c;可通过内置的threadIdx变量来获取其thread index。threadIdx为三维的&#xff0c;有相…

一. 初识数据结构和算法

数据结构与算法是一个达到高级程序员的敲门砖。当你脱离了语言的应用层面&#xff0c;去思考他的设计层面时&#xff0c;你就依旧已经开始初识数据结构与算法了 数据结构 什么是数据结构 对于数据结构的定义官方并没有统一的解释&#xff0c;在各个百科以及算法的书中&#xf…

MicroPython标准库

MicroPython标准库 arraybinascii(二进制/ASCII转换)builtins – 内置函数和异常cmath – 复数的数学函数collections – 集合和容器类型errno – 系统错误代码gc – 控制垃圾收集器hashlib – 散列算法heapq – 堆队列算法io – 输入/输出流json – JSON 编码和解码math – 数…

《微信小程序开发从入门到实战》学习四十一

4.3 云开发文件存储 文件存储功能支持将任意数量和格式的文件&#xff08;如图片和视频&#xff09;保存在云端&#xff0c;支持 以文件夹的形式将文件归类。 在云开发控制台中&#xff0c;可以对云端保存的文件进行管理。 也可以通过文件存储API对文件进行上传、删除、移动…

SA与NSA网络架构的区别

SA与NSA网络架构的区别 1. 三大运营商网络制式&#xff1a;2. 5G组网方式及业务特性3. NSA-3系列4. NSA—4系列5. NSA-7系列6. 5G SA网络架构7. 运营商策略 1. 三大运营商网络制式&#xff1a; 联通&#xff1a;3G(WCDMA)\4G(FDD-LTE/TD-LTE)\5G(SA/NSA)移动&#xff1a;2G(GS…

如何购买华为云服务器

华为云是华为推出的云计算服务平台&#xff0c;旨在为企业和个人提供全面的云端解决方案。它提供了包括计算、存储、数据库、人工智能、大数据、安全等多种云服务&#xff0c;覆盖了基础设施、平台和软件级别的需求。华为云致力于构建安全可信赖的云计算基础设施&#xff0c;以…

数据库Delete的多种用法

数据库的Delete操作是用来删除数据库中的数据记录的&#xff0c;它是数据库操作中的一种重要操作&#xff0c;能够帮助用户删除不需要的数据&#xff0c;以便保持数据库的整洁和高效。在使用Delete操作时&#xff0c;需要注意确保操作的准确性和安全性&#xff0c;以免误删重要…

AI助力智慧农业,基于YOLOv3开发构建农田场景下的庄稼作物、田间杂草智能检测识别系统

智慧农业随着数字化信息化浪潮的演变有了新的定义&#xff0c;在前面的系列博文中&#xff0c;我们从一些现实世界里面的所见所想所感进行了很多对应的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《自建数据集&#xff0c;基于YOLOv7开发构建农田场景下杂草…

数电笔记之寄存器

数电 1 数字电路基础 1.2 二进制数据表达 1.2.1 二进制简介 1.2.2 用二进制表达文字 常用的中文字符集&#xff1a;GBK&#xff0c;UTF8 1.2.3 用二进制表达图片 图片像素化&#xff0c;像素数字化 1.2.4 用二进制表达声音 1.2.5 用二进制表达视频 1.3 数字电路 1.3…

Python与PHP:编写大型爬虫的适用性比较

目录 一、引言 二、Python编写爬虫的优势 1、强大的数据处理能力 2、丰富的网络库和框架 3、良好的可读性和易维护性 4、社区支持和生态系统 三、PHP编写爬虫的优势 1、简单易学 2、广泛的应用领域 3、高效的性能 4、灵活的请求处理方式 四、大型爬虫的编写实例&am…

JavaScript <md5加密的两种不同输出结果分析>--案例(二点一)

前言: 问题是这样的,在浏览器中看到这段代码 然后在控制台进行输出.得到: 紧接着,就在,js文件里面进行转译: 可是,得到的结果是: 这是问题!!! 正题: 为什么相同的js代码,在 .js 文件中的输出与 Chrome 控制台中的输出不一样? 环境差异&#xff1a;不同的JavaScript环境&…

Linux使用root用户安装完MySQL软件后,配置MySQL这个普通用户登录

在 Linux 系统中&#xff0c;当您使用 root 用户安装 MySQL 后&#xff0c;系统会自动创建一个名为 mysql 的系统用户。这个 mysql 用户主要用于管理 MySQL 服务的运行&#xff0c;通常是没有登录系统的权限的。如果您希望使这个 mysql 用户能够登录到系统&#xff0c;您需要设…

Android 12.0 Folder文件夹全屏后文件夹图标列表居中时拖拽app到桌面的优化

1.概述 在12.0的系统rom产品开发中,在Launcher3中在目前的产品需求开发中,对于Launcher3中的文件夹Folder的布局UI 进行了定制化的需求要求把Folder修改为全屏,然后在中间显示文件夹图标的列表,这时候如果Folder是全屏的话,如果拖拽文件夹列表中的app图标,只有拖拽 到屏…

【数据结构实验】树(一)构建二叉查找树(BST)

文章目录 1. 引言2. 二叉查找树3. 实验内容3.1 实验题目&#xff08;一&#xff09;输入要求&#xff08;二&#xff09;输出要求 3.2 算法实现1. 数据结构2. 全局变量3. 中序遍历函数InOrder4. 二叉查找树的构建函数T5. 主函数 3.3 代码整合 4. 实验结果 1. 引言 二叉查找树&a…

ntopng如何将漏洞扫描与流量监控相结合,以提高网络安全性

来源&#xff1a;艾特保IT 虹科干货 | ntopng如何将漏洞扫描与流量监控相结合&#xff0c;以提高网络安全性 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; ntopng为人所知的“身份”是被动流量监控。然而&#xff0c;如今的ntopng6.0也进化出主动监控功能来&#xf…

Mybatis XML 配置文件

我们刚开始就有说Mybatis 的开发有两种方式: 1.注释 2.XML 注解和 XML 的方式是可以共存的 我们前面说的都是注释的方式,接下来是XML方式 XML的方式分为三步 : 1.配置数据库(配在 application.yml 里面) 这个跟注释的配置是一样的,username应该都是一样的,password记得写…