当前位置: 首页 > news >正文

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();}}}

相关文章:

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

示例图&#xff1a; 1.导包 在build.gradle 中 加入 // 使用androidx版本库implementation androidx.lifecycle:lifecycle-extensions:2.1.0-alpha03 2. 开启dataBinding android{...// 步骤1.开启data bindingdataBinding {enabled true}...} 3.写个类继承 ViewModel pac…...

音视频之旅 - 基础知识

图像基础知识 像素 像素是图像的基本单元&#xff0c;一个个像素就组成了图像。你可以认为像素就是图像中的一个点。在下面这张图中&#xff0c;你可以看到一个个方块&#xff0c;这些方块就是像素 分辨率 图像&#xff08;或视频&#xff09;的分辨率是指图像的大小或尺寸。…...

分类预测 | SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类预测

分类预测 | SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类预测 目录 分类预测 | SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类…...

如何使用 Zotero 导出所选条目的 PDF 文件

如何使用 Zotero 导出所选条目的 PDF 文件 Zotero 是一款强大的参考文献管理工具&#xff0c;但它并不直接提供将整个文件夹导出为 PDF 的选项。不过&#xff0c;您可以使用以下步骤来导出您所选的 Zotero 条目中的 PDF 文件&#xff0c;无需额外的插件。 选择所需的 Zotero 条…...

minio的k8s的单机部署

minio的k8s的单机部署 apiVersion: apps/v1 kind: Deployment metadata:name: minionamespace: itshare spec:replicas: 1selector:matchLabels:app: miniotemplate:metadata:labels:app: miniospec:containers:- name: minioimage: minio/minio:RELEASE.2022-10-15T19-57-03Z…...

Git 更改remote repo 地址

Git 更改remote repo 地址 我们想更换远程 repo 地址, 因为我们仓库更换了名称. git remote rename origin 查看现在的 romote 地址 # 查看 remote 地址 git remote -v origin gitgitee.com:changyubiao/attrdict.git (fetch) origin gitgitee.com:changyubiao/attrdict.gi…...

24、文件上传漏洞——Apache文件解析漏洞

文章目录 一、环境简介一、Apache与php三种结合方法二、Apache解析文件的方法三、Apache解析php的方法四、漏洞原理五、修复方法 一、环境简介 Apache文件解析漏洞与用户配置有密切关系。严格来说&#xff0c;属于用户配置问题&#xff0c;这里使用ubantu的docker来复现漏洞&am…...

使用Go快速开发TCP公共服务

使用Go快速开发TCP公共服务 文章目录 使用Go快速开发TCP公共服务一、前言二、实现思路三、源码四、测试使用五、最后 一、前言 之前使用的公共TCP服务无法使用了&#xff0c;想了一下整个实现原理不是很复杂&#xff0c;就利用Go快速开发了一个&#xff0c;利用公网服务器可以…...

QEMU环境调试方法

目录 1.如何查看makefile构建过程执行的命令&#xff1f; 2.如何使用GCC生成C程序的宏展开文件&#xff1f; 3.如何在qemu中执行特定的可执行程序&#xff1f; 4.如何在qemu中直接运行可执行程序&#xff1f; 5.如何在qemu中调试某个可执行程序&#xff1f; 本文从调试的角…...

京东数据运营(京东API接口):10月投影仪店铺数据分析

鲸参谋监测的京东平台10月份投影仪市场销售数据已出炉&#xff01; 10月份&#xff0c;环同比来看&#xff0c;投影仪市场销售均上涨。鲸参谋数据显示&#xff0c;今年10月&#xff0c;京东平台投影仪的销量为16万&#xff0c;环比增长约22%&#xff0c;同比增长约8%&#xff1…...

Aloha 机械臂的学习记录2——AWE:AWE + ACT

继续下一个阶段&#xff1a; Train policy python act/imitate_episodes.py \ --task_name [TASK] \ --ckpt_dir data/outputs/act_ckpt/[TASK]_waypoint \ --policy_class ACT --kl_weight 10 --chunk_size 50 --hidden_dim 512 --batch_size 8 --dim_feedforward 3200 \ --n…...

Spring Boot 项目的创建、配置文件、日志

文章目录 Spring Boot 优点创建 Spring Boot 项目创建项目认识目录网页创建&#xff08;了解&#xff09; 约定大于配置Spring Boot 配置文件配置文件格式读取配置项properties 配置文件yml 配置文件基本语法进阶语法配置对象配置集合yml 设置不同环境的配置文件 Spring Boot 日…...

MySQL:drop、delete与truncate区别

一、用法不同 1、drop(丢弃数据): drop table 表名 &#xff0c;直接将表都删除掉&#xff0c;在删除表的时候使用。 2、truncate (清空数据) : truncate table 表名 &#xff0c;只删除表中的数据&#xff0c;再插入数据的时候自增长 id 又从 1 开始&#xff0c;在清空表中数…...

2024年顶级的9个 Android 数据恢复工具(免费和付费)

不同的事情可能会损坏您的Android手机并导致您丢失数据。但大多数时候&#xff0c;您可以使用取证工具恢复部分或全部文件。 问题可能来自手机的物理损坏、磁盘的逻辑故障、完整的系统擦除&#xff0c;或者只是简单的粗心大意。 但是&#xff0c;无论数据丢失的原因是什么&am…...

c# Aspose.Cells 导出Excel表格 使用随记

/// <summary>/// 导出Excel表格/// </summary>/// <param name"list">数据集合</param>/// <param name"header">数据表头</param>/// <param name"sumColumn">求和列</param>/// <param n…...

SAP UI5 walkthrough step3 Controls

在上一步&#xff0c;我们是直接用index.html 中的body 里面的DIVision去输出 hello world&#xff0c; 在这个章节&#xff0c;我们将用SAP UI5 的标准控件 sap/m/Text 首先&#xff0c;我们去修改 webapp/index.html <!DOCTYPE html> <html> <head><…...

【分布式微服务专题】从单体到分布式(一、SpringCloud项目初步升级)

目录 前言阅读对象阅读导航前置知识笔记正文一、单体服务介绍二、服务拆分三、分布式微服务升级前的思考3.1 关于SpringBoot/SpringCloud的思考【有点门槛】 四、SpringCloud升级整合4.1 新建父子项目 学习总结感谢 前言 从本节课开始&#xff0c;我将自己手写一个基于SpringC…...

python安装与工具PyCharm

摘要&#xff1a; 周末闲来无事学习一下python&#xff01;不是你菜鸡&#xff0c;只不过是对手太强了&#xff01;所以你要不断努力&#xff0c;去追求更高的未来&#xff01;下面先了解python与环境的安装与工具的配置&#xff01; python安装&#xff1a; 官网 进入官网下载…...

Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机图像保存到电脑内存的技术背景代码分析注册SDK回调函数BufferEvent声明可以存储相机图像的内存序列和名称在图像回调函数中将图像保存在内存序…...

iOS 防截屏方法(一)

利用UITextField的安全输入secureTextEntry来实现防截屏效果&#xff0c;上代码&#xff1a; // 将 textField 添加到父视图UITextField *textField [[UITextField alloc] init];textField.backgroundColor [UIColor whiteColor];textField.secureTextEntry YES;[self.view …...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...