【Android】视图与常用控件总结

文章目录

    • 一、视图基础
      • 1.1 设置视图的宽高
      • 1.2 设置视图的间距
      • 1.3 设置视图的对齐方式
      • 1.4 总结
    • 二、控件
      • 2.1 TextView
        • 2.1.1 设置宽高
        • 2.1.2 设置内容
        • 2.1.3 设置大小
        • 2.1.4 设置颜色
      • 2.2 Button
      • 2.3 EditText
      • 2.4 ImageView
      • 2.5 ProgressBar
      • 2.6 AlertDialog
      • 2.7 ProgressDialog

本文主要介绍安卓开发中常用控件的使用

一、视图基础

  • View 是安卓中所有控件的基类, 是一个抽象类,代表屏幕上的一个矩形区域。
  • View 类提供了绘制和事件处理的基本功能。
image-20240717145005224
  • 所有UI组件(如按钮、文本框、图片等)都是View的子类。
  • View 本身可以直接使用,也可以被继承和扩展以创建自定义控件。

1.1 设置视图的宽高

  1. xml中

视图宽度通过属性android:layout width表达

视图高度通过属性android:layout height表达

宽高的取值主要有下列三种:

  • match_parent:表示与上级视图保持一致
  • wrap_content:表示与内容自适应
  • 以dp为单位的具体尺寸
  1. java代码中

1> 首先确保XML中的宽高属性值为wrap_content

2> 打开该页面对应的Java代码,依序执行以下三个步骤:

  1. 调用控件对象的getLayoutParams方法,获取该控件的布局参数。
  2. 布局参数的width属性表示宽度,height属性表示高度,修改这两个属性值
  3. 调用控件对象的setLayoutParams方法,填入修改后的布局参数使之生效。

示例:

TextView textView = findViewById(R.id.textView);
// 获取tv_code的布局参数,内部类
ViewGroup.LayoutParams layoutParams = textView.getLayoutParams();
// 修改布局参数中的宽度数值,注意默认px单位,需要把dp数值转成px数值
layoutParams.width = 200; // 宽度
layoutParams.height = 100; // 高度
// 设置tv_code参数
textView.setLayoutParams(layoutParams);

1.2 设置视图的间距

设置视图的间距有两种方式:

  • 采用layout_margin属性,它指定了当前视图与周围平级视图之间的距离。包括layout_marginlayout_marginLeftlayout_marginToplayout_marginRightlayout_marginBottom
  • 采用padding属性,它指定了当前视图与内部下级视图之间的距离。包括paddingpaddingLeftpaddingToppaddingRightpaddingBottom

设置间距,layout_margin指的是当前视图与外部视图(包括上级视图和平级视图)之间的距离,而padding指的是当前视图与内部视图(包括下级视图和内部文本)之间的距离
在这里插入图片描述

示例:

<?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="500dp"              <!-- 设置外部布局的高度为500dp -->android:background="#00AAFF"               android:orientation="vertical">            <!-- 设置外部布局的方向为垂直方向 --><!--中间层布局背景为黄色--><LinearLayoutandroid:layout_width="match_parent"    <!-- 设置中间层布局的宽度为父布局的宽度 -->android:layout_height="match_parent"   <!-- 设置中间层布局的高度为父布局的高度 -->android:layout_margin="20dp"           <!-- 设置中间层布局的外边距为20dp -->android:background="#FFFF99"           android:padding="80dp">                <!-- 设置中间层布局的内边距为80dp --><!--最内层视图背景为亮黄色--><Viewandroid:layout_width="match_parent"  <!-- 设置视图的宽度为父布局的宽度 -->android:layout_height="match_parent" <!-- 设置视图的高度为父布局的高度 -->android:background="#FFEB3B" />      </LinearLayout>
</LinearLayout>

在这里插入图片描述

1.3 设置视图的对齐方式

有两种途径:

  • 采用layout_gravity属性,它指定了当前视图相对于上级视图的对齐方式
  • 采用gravity属性,它指定了下级视图相对于当前视图的对齐方式

layout _gravitygravity的取值包括:lefttoprightbottom

还可以用竖线连接各取值,例如“left|top”表示即靠左又靠上,也就是朝左上角对齐。

示例:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="300dp"android:background="#CDDC39"android:orientation="horizontal"><!-- 第一个嵌套的 LinearLayout --><LinearLayoutandroid:layout_width="0dp"android:layout_height="200dp"android:layout_gravity="bottom"  <!-- 父布局中的对齐方式 -->android:layout_margin="10dp"android:layout_weight="1"  <!-- 权重,使其占据剩余空间 -->android:background="#ff0000"android:gravity="left"  <!-- 子布局内部内容的对齐方式 -->android:padding="10dp"><!-- 内部的 View --><Viewandroid:layout_width="100dp"android:layout_height="100dp"android:background="#2196F3" /></LinearLayout><!-- 第二个嵌套的 LinearLayout --><LinearLayoutandroid:layout_width="0dp"android:layout_height="200dp"android:layout_gravity="top"  <!-- 父布局中的对齐方式 -->android:layout_margin="10dp"android:layout_weight="1"  <!-- 权重,使其占据剩余空间 -->android:background="#ff0000"android:gravity="right|bottom"  <!-- 子布局内部内容的对齐方式 -->android:padding="10dp"><!-- 内部的 View --><Viewandroid:layout_width="100dp"android:layout_height="100dp"android:background="#2196F3" /></LinearLayout></LinearLayout>
image-20240625231524925

在 Android 中,layout_weight 是用来控制布局中子元素分配剩余空间的属性。

如果一个父布局的宽度或高度设置为 match_parent(即占据父布局的全部空间),并且它的子元素的宽度或高度设置为 0dp,那么这些子元素将会根据它们的 layout_weight 属性来分配剩余的空间。

layout_weight 的默认值是 0,表示不占据剩余空间;而设置为大于 0 的值(比如 1)则表示该子元素在分配剩余空间时的相对权重。例如,如果父布局剩余空间为 300dp,并且有两个子元素,一个 layout_weight 设置为 1,另一个为 2,则第一个子元素将获得 (1 / (1 + 2)) * 300dp = 100dp,第二个子元素将获得 (2 / (1 + 2)) * 300dp = 200dp

给每个嵌套的 LinearLayout 设置了 layout_weight="1",这意味着它们会平均地占据父布局中剩余的空间。这样做可以使两个嵌套的 LinearLayout 在水平方向上平分父布局的空间,因为父布局的 layout_widthmatch_parent

1.4 总结

XML布局文件中,视图控件常用的公有布局属性:

属性名描述
android:id为视图分配唯一的ID,用于在代码中引用
android:layout_width设置视图的宽度
android:layout_height设置视图的高度
android:layout_margin设置视图的外边距
android:layout_padding设置视图的内边距
android:layout_gravity设置视图在其父视图中的对齐方式(仅适用于ViewGroup的子视图)
android:gravity设置视图内容的对齐方式
android:background设置视图的背景颜色或图片
android:visibility设置视图的可见性(visibleinvisiblegone
android:layout_weight设置视图在线性布局中的权重(仅适用于LinearLayout
android:layout_alignParentTop设置视图是否与父视图的顶部对齐(仅适用于RelativeLayout
android:layout_alignParentBottom设置视图是否与父视图的底部对齐(仅适用于RelativeLayout
android:layout_centerInParent设置视图是否在父视图中居中(仅适用于RelativeLayout
android:layout_below设置视图在另一视图的下面(仅适用于RelativeLayout
android:layout_above设置视图在另一视图的上面(仅适用于RelativeLayout

二、控件

控件(Widget)在Android中通常指的是View的具体实现或继承自View的类,这些类具有特定的UI表现形式和功能。控件用于在用户界面上展示信息或接受用户输入。

  • 特性:控件是View的子类,它们通过扩展View类来提供具体的UI元素,如按钮、文本框、列表等。
  • 用途:控件用于构建用户界面的具体元素,如显示文本、图片,或者响应用户的点击等。

2.1 TextView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/text_view"//给当前控件唯一标识符android:layout_width="match_parent"//宽android:layout_height="wrap_content"//高android:textSize="24sp"//字体大小android:textColor="#00ff00"//文本颜色android:text="xiaoduyyy"//文本内容android:gravity="center"/>//对齐方式</LinearLayout>
2.1.1 设置宽高
  1. 在布局文件中设置

match_parent:控件会占满父布局的全部空间。

wrap_content:控件会根据其内容大小自动调整。

精确值:如 200dp,指定具体的宽度或高度。

<TextViewandroid:id="@+id/myTextView"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Hello, World!"android:gravity="center"
/>

上方代码:宽度占满父布局,即宽度和父布局一样宽,即手机屏幕宽度;高度包住内容即可

2.1.2 设置内容

设置文本内容两种方式

  1. 在 XML 文件中通过属性android:text设置文本
  2. 在 Java 代码中调用文本视图对象的setText方法设置文本

示例:

xml文件内为第一种方式

java文件内为第二种方式

新建一个acticity_text_view文件

<?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"><TextViewandroid:id="@+id/tv_hello"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="修改前" /></LinearLayout>

新建一个TextViewActivity类,该活动需要在AndroidMainfest中注册,并且exportedtrue

package com.example.textdisplay_617;import android.os.Bundle;
import android.widget.TextView;import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;public class TextViewActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_text_view);TextView tv=findViewById(R.id.tv_hello);tv.setText(R.string.hello);}
}
2.1.3 设置大小
  1. 在 Java 代码中调用setTextSize方法,即可指定文本大小,
  2. 在 XML 文件中则通过属性android:textSize指定文本大小,此时需要指定字号单位。
  • px:它是手机屏幕的最小显示单位,与设备的显示屏有关。
  • dp:它是与设备无关的显示单位,只与屏幕的尺寸有关。
  • sp:它专门用来设置字体大小,在系统设置中可以调整字体大小。
名称解释
px(Pixel像素)是作为图像构成的基本单元,单个像素的大小并不固定,跟随屏幕大小和像素数量的关系变化,一个像素点为1px。
Resolution(分辨率)是指屏幕的垂直和水平方向的像素数量,如果分辨率是1920*1080,那就是垂直方向有1920个像素,水平方向有1080个像素。
Dpi (像素密度)是指屏幕上每英寸(1英寸=2.54厘米)距离中有多少个像素点。
Density(密度)是指屏幕上每平方英寸(2.54^2平方厘米)中含有的像素点数量
Dip (设备独立像素)也可以叫做dp,长度单位,同一个单位在不同的设备上有不同的显示效果,具体效果根据设备的密度有关

对于相同分辨率的手机,屏幕越大,同DP的组件占用屏幕比例越小

对于相同尺寸的手机,即使分辨率不同,同DP的组件占用屏幕比例也相同。

dp的UI效果只在相同尺寸的屏幕上相同,如果尺寸差异过大,则需要重做dp适配

示例

方法一

public class TextSizeActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_text_size);TextView tv = findViewById(R.id.tv_hello);tv.setTextSize(50);}
}

setTextSize一个参数的方法默认使用sp

方法二:

 <TextViewandroid:id="@+id/tv_hello"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello"android:textSize="30px"/>
2.1.4 设置颜色

在 Java 代码中调用 setTextColor 方法即可设置文本颜色,具体色值可从 Color 类取

在XML文件中则通过属性android:textColor指定文本颜色,色值由透明度alphaRGB三原色(红色red、绿色green、蓝色blue)联合定义。

色值有八位十六进制数与六位十六进制数两种表达方式

例如八位编码FFEEDDCC中,前两位FF表示透明度,EE表示红色的浓度,DD表示绿色的浓度,CC表示蓝色的浓度。

  • 透明度为FF表示完全不透明,为00表示完全透明。
  • RGB三色的数值越大,表示颜色越浓,也就越亮;数值越小,表示颜色越淡,也就越暗。
  1. 文字颜色
  • java代码
tv.setTextColor(0xFF0000);

java代码中只写六位的方法默认为00完全透明

  • xml代码
 <TextViewandroid:id="@+id/tv_hello2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello"android:textColor="#FF0000" />

xml代码中只写六位默认为FF完全不透明

  1. 背景颜色
  • java代码
		TextView tv_code_background = findViewById(R.id.tv_hello2);tv_code_background.setBackgroundColor(Color.GRAY);
//       tv_code_background.setBackgroundResource(R.color.customcolor);
  • xml代码
        android:background="@color/customcolor"/>

2.2 Button

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Button"android:textAllCaps="false"/>//是否进行大写转换</LinearLayout>

MainActivity中为Button点击事件注册一个监听器

步骤:

  1. 在 Activity 或 Fragment 中获取控件的实例

    可以使用 findViewById 方法。

  2. 设置并绑定事件监听类型

    Android 中常见的事件监听类型包括点击事件(OnClickListener)、长按事件(OnLongClickListener)等。

  3. 处理点击事件的逻辑

匿名内部类方法:

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button = (Button) findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "你点击了按钮", Toast.LENGTH_SHORT).show();}});}
}

接口方法:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);Button button1 = (Button) findViewById(R.id.button1);button1.setOnClickListener(this);}@Overridepublic void onClick(View v) {Toast.makeText(this, "点击", Toast.LENGTH_LONG).show();}

2.3 EditText

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/button1"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="Button1" /><EditTextandroid:id="@+id/edit_text"android:layout_width="match_parent"android:layout_height="wrap_content"// 默认显示的提示内容android:hint="快来输点什么"android:maxLines="3" /></LinearLayout>

实现一个输入完内容后,利用Toast弹出该消息

public class MainActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button1 = (Button) findViewById(R.id.button1);button1.setOnClickListener(this);}@Overridepublic void onClick(View v) {String inputText = editText.getText().toString();Toast.makeText(this, inputText, Toast.LENGTH_LONG).show();}
}

2.4 ImageView

  <ImageViewandroid:id="@+id/image_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/image_1" />

在按钮点击事件中通过接口实现的方式来动态改变ImageView的显示图片:

onCreateimageView = findViewById(R.id.image_view);来获取imageView 组件

因为我们使用接口来实现监听的,所以还需要private ImageView imageView;全局变量

在点击按钮后的逻辑中加入该行,即可实现更换照片

imageView.setImageResource(R.drawable.image_2);

2.5 ProgressBar

<ProgressBarandroid:id="@+id/progress_bar"style="?android:attr/progressBarStyleHorizontal"android:layout_width="match_parent"android:layout_height="wrap_content"android:max="100" />

android:max="100":设置进度条的最大值为 100。该属性指定进度条最大范围,用来表示任务进度百分比。

@Override
public void onClick(View v) {//用法1:如果进度条当前是隐藏的,则显示;如果已显示,则隐藏。
//    if (progressBar.getVisibility() == View.GONE) {
//        progressBar.setVisibility(View.VISIBLE);
//    } else {
//        progressBar.setVisibility(View.GONE);
//    }//用法2:增加进度条的进度值,并更新显示int progress = progressBar.getProgress();progress += 10;progressBar.setProgress(progress);
}

2.6 AlertDialog

弹出一个窗口来提示用户

public class MainActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);Button button2 = (Button) findViewById(R.id.button2);button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);dialog.setTitle("警告");dialog.setMessage("确定要点击这个按钮吗?");dialog.setCancelable(false);dialog.setPositiveButton("确认", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});dialog.show();}});}

2.7 ProgressDialog

显示进度指示的对话框,已弃用

public class MainActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);Button button3 = (Button) findViewById(R.id.button3);button3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);progressDialog.setTitle("这是一个加载");progressDialog.setMessage("加载中..........");// 设置是否可以取消progressDialog.setCancelable(false);progressDialog.show();// 加载3秒new Handler().postDelayed(new Runnable() {@Overridepublic void run() {progressDialog.dismiss();}}, 3000);}});}


如有错误烦请指正
感谢您的阅读

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

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

相关文章

JAVASE进阶day14(网络编程续TCP,日志)

TCP 三次握手 四次挥手 package com.lu.day14.tcp;import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket;public class Client {public static void main(String[] args) {try(Socket socket new Socket("192.…

哈默纳科HarmonicDrive减速机组装注意事项

在机械行业中&#xff0c;精密传动设备HarmonicDrive减速机对于维持机械运作的稳定性和高效性起着至关重要的作用。然而在减速机的组装过程中&#xff0c;任何一个细微的错误都可能导致其运转时出现振动、异响等不良现象&#xff0c;严重时甚至可能影响整机的性能。因此&#x…

【开源库】libodb库编译及使用

前言 本文介绍windows平台下libodb库的编译及使用。 文末提供libodb-2.4.0编译好的msvc2019_64版本&#xff0c;可直接跳转自取 ODB库学习相关 【开源库学习】libodb库学习&#xff08;一&#xff09; 【开源库学习】libodb库学习&#xff08;二&#xff09; 【开源库学习】…

30种图像动画特效算法(C#多线程版) - 好文要转

最近想做一个屏幕保护软件&#xff0c;需要图片切换效果&#xff0c;于是就找到这个博文&#xff0c;强烈推荐&#xff1a; https://blog.51cto.com/mengliao/473169 其中的源码包在此下载&#xff1a;https://download.csdn.net/download/lzhdim/89532212 效果如下&#xff1a…

Pycharm 安装与使用

PyCharm的安装与使用 一、什么是PyCharm PyCharm是由JetBrains开发的专业Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供智能代码补全、语法高亮和代码导航等编辑功能。它具有强大的调试工具和内置版本控制系统支持&#xff0c;方便代码管理和协作。PyCharm…

《小程序02:云开发之增删改查》

一、前置操作 // 一定要用这个符号包含里面的${}才会生效 wx.showToast({title: 获取数据成功&#xff1a;${colorLista}, })1.1&#xff1a;初始化介绍 **1、获取数据库引用&#xff1a;**在开始使用数据库 API 进行增删改查操作之前&#xff0c;需要先获取数据库的引用 cons…

<数据集>安全帽佩戴识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3912张 图片分辨率&#xff1a;640640 标注数量(xml文件个数)&#xff1a;3912 标注数量(txt文件个数)&#xff1a;3912 标注类别数&#xff1a;2 标注类别名称&#xff1a;[no-helmet, helmet] 序号类别名称图片…

机器学习——降维算法PCA和SVD(sklearn)

目录 一、基础认识 1. 介绍 2. 认识 “ 维度 ” &#xff08;1&#xff09;数组和Series &#xff08;2&#xff09;DataFrame 表 &#xff08;3&#xff09;图像 3. 降维思想 4. 降维步骤 二、降维算法&#xff08;PCA&#xff09; 1. PCA实现 &#xff08;1&#…

java转义文本中的HTML字符为安全的字

java转义文本中的HTML字符为安全的字 &#xff0c;以下字符被转义&#xff1a;替换为 (&apos; doesnt work in HTML4) " 替换为 &quot; & 替换为 &amp; < 替换为 < > 替换为 >1.先添加hutool依赖到pom <dependency><groupId>cn…

VSCode部署Pytorch机器学习框架使用Anaconda(Window版)

目录 1. 配置Anaconda1.1下载安装包1. Anaconda官网下载2, 安装Anaconda 1.2 创建虚拟环境1.3 常用命令Conda 命令调试和日常维护 1.4 可能遇到的问题执行上述步骤后虚拟环境仍在C盘 2. 配置cuda2.1 查看显卡支持的cuda版本2.2 下载对应cuda版本2.3 下载对应的pytorch可能出现的…

【数据结构】二叉树OJ题_对称二叉树_另一棵的子树

对称二叉树 题目 101. 对称二叉树 - 力扣&#xff08;LeetCode&#xff09; 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2…

【ECharts】使用 ECharts 处理不同时间节点的数据系列展示

使用 ECharts 处理不同时间节点的数据系列展示 在数据可视化中&#xff0c;我们经常遇到这样的问题&#xff1a;不同数据系列的数据点在时间轴上并不对齐。这种情况下&#xff0c;如果直接在 ECharts 中展示&#xff0c;图表可能会出现混乱或不准确。本文将通过一个示例代码&a…

C#与C++交互开发系列(四):使用C++/CLI进行互操作

欢迎来到C#与C交互开发系列的第四篇。在这篇博客中&#xff0c;我们将深入探讨使用C/CLI进行互操作的方法和技巧。C/CLI&#xff08;Common Language Infrastructure&#xff09;是C与.NET框架之间的桥梁&#xff0c;能够让C代码与托管代码无缝集成。 4.1 什么是C/CLI&#xf…

【源码阅读】Sony的go breaker熔断器源码探究

文章目录 背景源码分析总结 背景 在微服务时代&#xff0c;服务和服务之间调用、跨部门调用都是很常见的事&#xff0c;但这些调用都存在很多不确定因素&#xff0c;如核心服务A依赖的部门B服务挂掉了&#xff0c;那么A本身的功能将会受到直接的影响&#xff0c;而这些都会影响…

GaussianPro使用笔记

1. 介绍 GaussianPro: 3D Gaussian Splatting with Progressive Propagation 3D高斯分布(3DGS)最近以其高保真度和效率彻底改变了神经渲染领域。然而&#xff0c;3DGS在很大程度上依赖于运动结构&#xff08;SfM&#xff09;技术生成的初始化点云。当处理不可避免地包含无纹理…

<数据集>手势识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2400张 标注数量(xml文件个数)&#xff1a;2400 标注数量(txt文件个数)&#xff1a;2400 标注类别数&#xff1a;5 标注类别名称&#xff1a;[fist, no_gesture, like, ok, palm] 序号类别名称图片数框数1fist597…

Pycharm 和虚拟环境的那些事?

背景: 我既有 python 又有Anaconda Pycharm新建虚拟环境: 只说两种方式 通过Virualenv Environment新建: 这里我们勾选上 Make available to all projects ,之后点击&#x1f197; 然后可以发现只有非常少的包,因为没有勾选继承 编译器的包 创建的虚拟环境一般目录如下&…

Sparse4D-v3:稀疏感知的性能优化及端到端拓展

极致的感知性能与极简的感知pipeline一直是牵引我们持续向前的目标。为了实现该目标&#xff0c;打造一个性能优异的端到端感知模型是重中之重&#xff0c;充分发挥深度神经网络数据闭环的作用&#xff0c;才能打破当前感知系统的性能上限&#xff0c;解决更多的corner case&am…

下载最新版Anaconda、安装、更换源、配置虚拟环境并在vscode中使用

文章目录 进入官网进入下载页安装更换源配置虚拟环境env安装包requests在vscode中使用虚拟环境 进入官网 https://repo.anaconda.com/ 或进入清华大学下载 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 进入下载页 安装 更换源 查看已经存在的镜像源 bash cond…

物联网在养殖业领域的应用——案例分析

作者主页: 知孤云出岫 目录 作者主页:物联网在养殖业领域的应用——案例分析背景技术架构硬件设置连接多种传感器到微控制器 代码实现1. Arduino代码&#xff1a;采集多种传感器数据并上传到Thingspeak2. Python代码&#xff1a;从Thingspeak获取数据并进行综合分析和可视化 …