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.pswp.cn/news/207186.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207186.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207186.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

整數與IP地址間的轉換

原理&#xff1a;ip地址的每段可以看成是一個0-255的整數&#xff0c;把每段拆分成一個二進制形式組合起來&#xff0c;然后把這個二進制數轉變成一個長整數。 舉例&#xff1a;一個ip地址為10.0.3.193 每段數字相對應的二進制數 10 00001010 0 00000000 3 00000011 193 110000…

自下而上-存儲全棧(TiDB/RockDB/SPDK/fuse/ceph/NVMe/ext4)存儲技術專家成長路線

數字化時代的到來帶來了大規模數據的產生&#xff0c;各行各業都面臨著數據爆炸的挑戰。 隨著云計算、物聯網、人工智能等新興技術的發展&#xff0c;對存儲技術的需求也越來越多樣化。不同應用場景對存儲的容量、性能、可靠性和成本等方面都有不同的要求。具備存儲技術知識和技…

機器學習-聚類問題

前言 聚類算法又叫做”無監督分類“&#xff0c;目標是通過對無標記訓練樣本來揭示數據的內在性質及 規律&#xff0c;為進一步的數據分析提供基礎。 Kmeans 作為聚類算法的典型代表&#xff0c;Kmeans可以說是最簡單的聚類算法&#xff0c;沒有之一&#xff0c;那她是怎么完…

MySQL為何偏愛B+樹索引

一、MySQL、B樹概念 MySQL是一種關系型數據庫&#xff0c;它使用SQL語言來操作數據。SQL語言可以實現對數據的增刪改查等操作&#xff0c;但是如果數據量很大&#xff0c;那么這些操作的效率就會很低。為了提高效率&#xff0c;MySQL引入了索引的概念。 索引是一種數據結構&am…

人體關鍵點檢測1:人體姿勢估計數據集

人體關鍵點檢測1&#xff1a;人體姿勢估計數據集 目錄 人體關鍵點檢測1&#xff1a;人體姿勢估計數據集 1.人體姿態估計 2.人體姿勢估計數據集 &#xff08;1&#xff09;COCO數據集 &#xff08;2&#xff09;MPII數據集 &#xff08;3&#xff09;Human3.6M &#xf…

PostgreSQL 主鍵和唯一鍵的區別

主鍵和唯一鍵的區別 主鍵&#xff08;Primary Key&#xff09;&#xff1a; 主鍵是用于唯一標識表中的每一條記錄的鍵。主鍵必須是唯一的&#xff0c;不允許為空。一個表只能有一個主鍵。主鍵可以由一個或多個字段組成。主鍵的值在整個表中必須是唯一的&#xff0c;用于確保數據…

編譯器:swc 究竟比 babel 快在哪里?

前言 swc 與 babel 都是 JavaScript 編譯器&#xff0c;它們的主要功能是將 ES2015 以及 TypeScript, Flow, JSX 等語法轉換為瀏覽器或環境中的向后兼容的 JavaScript 代碼。 哪里快了&#xff1f; 1. 開發語言的優勢 swc 是用 Rust 語言開發的&#xff0c;而 babel 是用 Java…

MS5228/5248/5268:2.7V 到 5.5V、 12/14/16Bit、內置基準、八通道數模轉換器

MS5228/MS5248/MS5268 是一款 12/14/16bit 八通道輸出的電壓型 DAC &#xff0c;內部集成上電復位電路、可選內部基準、接口采用四線串口模式&#xff0c; 最高工作頻率可以到 40MHz &#xff0c;可以兼容 SPI 、 QSPI 、 DSP 接口和 Microwire 串口。輸出接到一個 …

IP地址/16或者/24的意義

IP地址/16或者/24的意義 2023-04-26 16:54 獵手家園 閱讀(533) 評論(0) 編輯 收藏 舉報 當創建VPC專有網絡時&#xff0c;許多人會遇到填寫IPv4地址的情況&#xff0c;通常使用的格式是xxx.xxx.xxx.xxx/16或者xxx.xxx.xxx.xxx/24。那么這個斜杠后面的數字代表什么意思呢&#…

<習題集><LeetCode><鏈表><2/19/21/23/24>

目錄 2. 兩數相加 19. 刪除鏈表的倒數第 N 個結點 21. 合并兩個有序鏈表 23. 合并 K 個升序鏈表 24. 兩兩交換鏈表中的節點 2. 兩數相加 https://leetcode.cn/problems/add-two-numbers/ public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//head是cur鏈表頭節點…

pdf轉png的兩種方法

背景:pdf在一般公司,沒有辦公系統,又不是word/wps/Office系統,讀不出來,識別不了,只能將其轉化為圖片png,因此在小公司或者一般公司就需要pdf轉png的功能。本文將詳細展開。 1、fitz庫(也就是PyMuPDF) 直接pip安裝PyMuPDF即可使用,直接使用fitz操作,無需其他庫。 …

Go語言實現深度學習的正向傳播和反向傳播

文章目錄 開發前言開發理論圖解理論數據類型數學函數數據節點統一抽象變量數據節點常量數據節點單目運算封裝雙目運算封裝算子節點統一抽象基礎算子加法算子減法算子乘法算子除法算子指數算子對數算子正切算子正弦算子余弦算子數據流圖正向傳播反向傳播正向訓練反向訓練運行示例…

我的記事本

url uniform resource locator. 統一資源定位符 請求狀態碼 1XX:信息響應 2XX:成功響應 3XX:重定向消息 4XX:客戶端錯誤響應 5XX:服務器端錯誤響應 IP地址分類 本機回環IP地址&#xff1a;127.0.0.1 &#xff5e; 127.255.255.254 局域網IP(私網IP) 192.168.0.0 &am…

船舶機電設備振動數據采集監控系統解決方案

船舶運行中&#xff0c;通常需要通過振動數據采集系統對船舶的各個機電設備運行進行監控&#xff0c;有助于在設備故障時快速預警&#xff0c;進行診斷、分析和維護&#xff0c;保證船舶機電設備正常工作&#xff0c;從而確保工作人員及船舶的安全。 船舶各種機電設備會產生大…

vLLM介紹

簡介 vLLM 工程github地址 Paged attention論文地址 vLLM開發者介紹 Woosuk Kwon vLLM: A high-throughput and memory-efficient inference and serving engine for LLMs. SkyPilot: A framework for easily and cost effectively running machine learning workloads on …

【模型量化】神經網絡量化基礎及代碼學習總結

1 量化的介紹 量化是減少神經網絡計算時間和能耗的最有效的方法之一。在神經網絡量化中&#xff0c;權重和激活張量存儲在比訓練時通常使用的16-bit或32-bit更低的比特精度。當從32-bit降低到8-bit&#xff0c;存儲張量的內存開銷減少了4倍&#xff0c;矩陣乘法的計算成本則二…

ALNS算法中隨機化重要性的評價

文章概述 本研究分析了在海上提貨和交付問題中使用的ALNS元啟發式算法中的隨機化成分。研究者提出了簡單的確定性替代方案&#xff0c;并通過實驗比較了隨機化和確定性成分的性能。結果表明&#xff0c;初始實現的簡單確定性替代方案能夠與隨機化成分的性能相匹配。這項研究為…

IDEA使用git從遠程倉庫獲取項目

將地址填入url中 然后直接clone就行

《Easy3d+Qt+VTK》學習

《Easy3dQtVTK》學習-1、編譯與配置 一、編譯二、配置注 一、編譯 1、 資源下載&#xff1a;easy3d giuhub 2、解壓縮 3、用qt打開CMakeLists.txt即可 4、點擊項目&#xff0c;選擇debug或者release&#xff0c;圖中3處可自行選擇&#xff0c;因為我的qt版本是6&#xff0c…

Java集合大總結——Collections工具類

簡單闡述 參考操作數組的工具類&#xff1a;Arrays&#xff0c;Collections 是一個操作 Set、List 和 Map 等集合的工具類。 常用方法 Collections 中提供了一系列靜態的方法對集合元素進行排序、查詢和修改等操作&#xff0c;還提供了對集合對象設置不可變、對集合對象實現…