android小球(一)

news/2024/6/24 8:48:49/文章来源:https://blog.csdn.net/LIUCHANGSHUO/article/details/137080939

1.提供两种小球模式:重力模式和手势模式

2.重力模式中,小球跟随重力进行移动

3.手势模式中,小球跟随手指滑动进行移动

4.在设置中,可以调整小球的大小,颜色,玩法模式

5.要求用户每次退出后再打开小球设置和位置为上次关闭时数据

package com.dji.myapplication2;import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.ColorDrawable;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.SeekBar;public class MainActivity extends AppCompatActivity implements SensorEventListener{private ImageView iv;private boolean isGravityEnabled = false;private float mSensorX;private float mSensorY;private float mLastX;private float mLastY;private int defaultSize = 100;private String defaultColor = "红色";private int ballColors = Color.RED;private int GRAVITY = 1;private int ballSize = 100;private BallView ballView;private int requestCode = 1;private static final String PREF_MODE_X = "MyGravityX";private static final String SELECTED_OPTION_KEY_LOCAD_X = "selectedGravityX";private static final String PREF_MODE_Y = "MyGravityY";private static final String SELECTED_OPTION_KEY_LOCAD_Y = "selectedGravityY";private SensorManager sensorManager;private Sensor gravitySensor;@SuppressLint({"MissingInflatedId", "WrongViewCast"})@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv = findViewById(R.id.settingsIcon);iv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, SettingsActivity.class);startActivity(intent);Log.i("Tag","1");//将小球位置信息保存到本地SharedPreferences中SharedPreferences.Editor editorX = getSharedPreferences(PREF_MODE_X, Context.MODE_PRIVATE).edit();SharedPreferences.Editor editorY = getSharedPreferences(PREF_MODE_Y, Context.MODE_PRIVATE).edit();if (ballView != null) {editorX.putInt(SELECTED_OPTION_KEY_LOCAD_X, (int) ballView.getX());editorY.putInt(SELECTED_OPTION_KEY_LOCAD_Y, (int) ballView.getY());}editorY.apply();editorX.apply();}});SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);SharedPreferences sharedPreference = getSharedPreferences("reekbar", Context.MODE_PRIVATE);SharedPreferences sharedPreferencess = getSharedPreferences("MyGravity", Context.MODE_PRIVATE);// 在Activity中获取用户设置的数据String ballColor = sharedPreferences.getString("selectedOption", defaultColor);String gravity = sharedPreferencess.getString("selectedGravity", defaultColor);ballSize = sharedPreference.getInt("seekBarSize", defaultSize);Log.i("Tag",gravity);if (gravity.equals("重力模式")) {isGravityEnabled = true;}else {isGravityEnabled = false;}if (ballColor.equals("红色")) {ballColors = Color.RED;}else if (ballColor.equals("蓝色")){ballColors = Color.BLUE;}else if (ballColor.equals("绿色")){ballColors = Color.GREEN;}else if (ballColor.equals("黄色")){ballColors = Color.YELLOW;}else{ballColors = Color.WHITE;}Log.i("Tag",gravity);SharedPreferences sharedPreferenceX = getSharedPreferences("MyGravityX", Context.MODE_PRIVATE);SharedPreferences sharedPreferenceY = getSharedPreferences("MyGravityY", Context.MODE_PRIVATE);int mLastX = sharedPreferenceX.getInt("selectedGravityX", 50);int mLastY = sharedPreferenceY.getInt("selectedGravityY", 50);ballView = new BallView(this);ballView.setImageResource(R.drawable.ball_shape); // 设置小球图片ballView.setColorFilter(ballColors); // 设置小球颜色为红色RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ballSize, ballSize); // 设置小球大小layoutParams.setMargins((int) mLastX, (int) mLastY, 0, 0); // 设置小球初始位置ballView.setLayoutParams(layoutParams);RelativeLayout layout = findViewById(R.id.settingsLayout);layout.addView(ballView);// 获取重力传感器sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);gravitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);// 注册重力传感器监听器sensorManager.registerListener(this, gravitySensor, SensorManager.SENSOR_DELAY_GAME);// 在主Activity中注册广播接收器BroadcastReceiver receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals("refresh_ball")) {refreshBall();}}};registerReceiver(receiver, new IntentFilter("refresh_ball"));}private void refreshBall() {// 重新加载主 activity,可以通过重新启动 activity 或者刷新数据的方式重新加载// 重新启动 activityIntent intent = getIntent();finish();startActivity(intent);}@Overridepublic void onSensorChanged(SensorEvent event) {if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {mSensorX = event.values[0];mSensorY = event.values[1];if (isGravityEnabled && ballView != null) {// 根据重力传感器数据更新小球的位置float newX = ballView.getX() + mSensorX;float newY = ballView.getY() + mSensorY;ballView.setX(newX);ballView.setY(newY);// 确保小球不超出屏幕边界checkBoundaries();}}}private void checkBoundaries() {if (ballView.getX() < 0) {ballView.setX(0);} else if (ballView.getX() > getScreenWidth() - ballSize) {ballView.setX(getScreenWidth() - ballSize);}}private float getScreenWidth() {DisplayMetrics displayMetrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);return displayMetrics.widthPixels;}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// 空实现}@Overrideprotected void onResume() {super.onResume();if (isGravityEnabled) {sensorManager.registerListener(this, gravitySensor, SensorManager.SENSOR_DELAY_GAME);}}@Overrideprotected void onPause() {super.onPause();sensorManager.unregisterListener(this);}@Overridepublic boolean onTouchEvent(MotionEvent event) {if (!isGravityEnabled) {float newX = event.getX();float newY = event.getY();ballView.setX(newX);ballView.setY(newY);checkBoundaries();}return super.onTouchEvent(event);}
}
package com.dji.myapplication2;import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;import androidx.annotation.Nullable;public class BallView extends androidx.appcompat.widget.AppCompatImageView {private float mLastX;private float mLastY;private float ballRadiu;private int ballColors;private SharedPreferences sharedPreferences ;public BallView(Context context) {super(context);}public BallView(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mLastX = event.getX();mLastY = event.getY();break;case MotionEvent.ACTION_MOVE:float dx = event.getX() - mLastX;float dy = event.getY() - mLastY;setX(getX() + dx);setY(getY() + dy);mLastX = event.getX();mLastY = event.getY();break;}return true;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 绘制小球canvas.drawCircle(mLastX, mLastY, ballRadiu,new Paint());}public void redrawBall(float ballX, float ballY, float ballRadius,int ballColor) {// 在这里添加重新绘制小球的逻辑// 例如改变小球的位置或颜色mLastX = ballX;// 新的球的x坐标mLastY = ballY;// 新的球的y坐标ballRadiu = ballRadius;// 新的球的半径ballColors= ballColor;// 重新绘制invalidate();}}
package com.dji.myapplication2;import androidx.appcompat.app.AppCompatActivity;import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import android.content.Context;public class SettingsActivity extends AppCompatActivity {private static final String PREF_NAME = "MyPrefs";private static final String SELECTED_OPTION_KEY = "selectedOption";private static final String PREF_MODE = "MyGravity";private static final String SELECTED_OPTION_KEY_GRAVITY = "selectedGravity";private static final String PREFS_REEKBAR = "reekbar";private static final String SEEK_BAR_SIZE_REEKBAR = "seekBarSize";private Button selectButton,btnGravity, btnSave;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_settings);selectButton = findViewById(R.id.selectButton);btnGravity = findViewById(R.id.btnGravity);btnSave = findViewById(R.id.btnSave);SeekBar seekBar = findViewById(R.id.sizeSeekBar);TextView textView = findViewById(R.id.text);SharedPreferences prefs = getSharedPreferences(PREFS_REEKBAR, MODE_PRIVATE);int savedSeekBarSize = prefs.getInt(SEEK_BAR_SIZE_REEKBAR, 0);seekBar.setProgress(savedSeekBarSize);textView.setText("当前大小为:" + savedSeekBarSize);seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {// 在TextView中实时显示SeekBar的大小textView.setText("当前大小为:" + progress);// 保存SeekBar的当前大小到SharedPreferencesSharedPreferences.Editor editor = getSharedPreferences(PREFS_REEKBAR, MODE_PRIVATE).edit();editor.putInt(SEEK_BAR_SIZE_REEKBAR, progress);editor.apply();}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {// 开始拖动SeekBar时的回调}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {// 停止拖动SeekBar时的回调}});// 恢复用户最近的选择SharedPreferences sharedPreferences = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);String lastSelectedOption = sharedPreferences.getString(SELECTED_OPTION_KEY, "No selection made");// 恢复用户最近的选择SharedPreferences sharedPreferences1 = getSharedPreferences(PREF_MODE, Context.MODE_PRIVATE);String lastSelectedOption1 = sharedPreferences1.getString(SELECTED_OPTION_KEY_GRAVITY, "No selection made");btnGravity.setText(lastSelectedOption1);btnGravity.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {showSelectionGravityDialog();
//                Toast.makeText(SettingsActivity.this, "选择模式当前模式为:手势操作", Toast.LENGTH_SHORT).show();}});selectButton.setText(lastSelectedOption);selectButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {showSelectionDialog();}});btnSave.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent("refresh_ball");sendBroadcast(intent);finish();}});}private void showSelectionGravityDialog() {final String[] items = {"手势操作", "重力模式"};AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("选择你的模式");builder.setItems(items, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String selectedGravity = items[which];Toast.makeText(SettingsActivity.this, "You selected: " + selectedGravity, Toast.LENGTH_SHORT).show();btnGravity.setText(selectedGravity); // 更新按钮文本为所选项// 保存用户选择到SharedPreferencesSharedPreferences sharedPreferences = getSharedPreferences(PREF_MODE, Context.MODE_PRIVATE);SharedPreferences.Editor editor = sharedPreferences.edit();editor.putString(SELECTED_OPTION_KEY_GRAVITY,selectedGravity);editor.apply();dialog.dismiss();}});builder.show();}private void showSelectionDialog() {final String[] items = {"红色", "蓝色", "绿色", "黄色", "白色"};AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("选择你的颜色");builder.setItems(items, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String selectedOption = items[which];Toast.makeText(SettingsActivity.this, "You selected: " + selectedOption, Toast.LENGTH_SHORT).show();selectButton.setText(selectedOption); // 更新按钮文本为所选项// 保存用户选择到SharedPreferencesSharedPreferences sharedPreferences = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);SharedPreferences.Editor editor = sharedPreferences.edit();editor.putString(SELECTED_OPTION_KEY,selectedOption);editor.apply();dialog.dismiss();}});builder.show();}@Overridepublic void onBackPressed() {Intent intent = new Intent();intent.putExtra("REPAINT_BALL", false); // 不重新绘制小球setResult(RESULT_OK, intent);finish();}}

在 \res\drawable目录下创建小球样式设置

<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"><solid android:color="#FF0000" /><size android:width="50dp" android:height="50dp" />
</shape>

 设置图标布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"android:background="#000000"android:id="@+id/settingsLayout"><!--    <ImageView-->
<!--        android:id="@+id/ball"-->
<!--        android:layout_width="50dp"-->
<!--        android:layout_height="50dp"-->
<!--        android:src="@drawable/ball_shape"-->
<!--        android:layout_marginStart="50dp"-->
<!--        android:layout_marginTop="50dp" />--><ImageViewandroid:id="@+id/settingsIcon"android:layout_width="20dp"android:layout_height="20dp"android:src="@drawable/ball_shape"android:layout_alignParentEnd="true"android:layout_marginTop="30dp"android:layout_marginEnd="30dp" /></RelativeLayout>

 设置相关的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/selectButton"android:layout_marginTop="20dp"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="红色"></Button><TextViewandroid:id="@+id/text"android:text="当前大小为:50"android:layout_marginTop="20dp"android:layout_below="@+id/selectButton"android:layout_width="match_parent"android:layout_height="wrap_content"/><SeekBarandroid:id="@+id/sizeSeekBar"android:max="100"android:progress="50"android:layout_width="match_parent"android:layout_height="wrap_content"android:thumb="@drawable/ball_shape"android:layout_below="@+id/text"/><Buttonandroid:id="@+id/btnGravity"android:layout_below="@+id/sizeSeekBar"android:text="手势操作"android:layout_marginTop="20dp"android:layout_width="match_parent"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/btnSave"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:text="Save"android:layout_margin="10dp" /></RelativeLayout>

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

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

相关文章

vlanif三层交换机实现不同网络通信

实验目的&#xff1a;通过三层交换机实现不同 网络通信&#xff0c;之前都是路由器进行不同网络转发 拓扑图 内容&#xff1a;左边vlan10&#xff0c;右边vlan20 lsw1接口通过所有vlan lsw2网路vlan10 lsw3网络vlan20 问题点&#xff1a;开始只是配置了最上面LSW1的交换机…

Leetcode 118. 杨辉三角

心路历程&#xff1a; 其实最直观的想法是可以直接按照从上到下的顺序遍历数组&#xff0c;依次计算数组的值即可&#xff0c;相当于DP表格的初始化。 但是也可以从递归的角度进行思考&#xff0c;cache yyds。 注意的点&#xff1a; 1、注意第二层循环col应该是[0, line1) …

C语言中入门到实战————动态内存管理

目录 前言 一、为什么要有动态内存分配 二、 malloc和free 2.1 malloc 2.2 free 三、calloc和realloc 3.1 calloc 3.2 realloc 四. 常见的动态内存的错误 4.1 对NULL指针的解引用操作 4.2 对动态开辟空间的越界访问 4.3 对非动态开辟内存使用free释放 4.4 使…

网络协议学习——HTTPS

目录 ​编辑 一&#xff0c;认识HTTPS 二&#xff0c;加密方式 1&#xff0c;对称式加密 2&#xff0c;非对称式的加密 3&#xff0c;数据指纹&#xff08;数据摘要&#xff09; 4&#xff0c;数据签名 三&#xff0c;HTTPS的工作原理 实现方式 数字证书 一&#xff0c…

5-规范设计(下):commit信息风格迥异、难以阅读,如何规范?

我们在做代码开发时&#xff0c;经常需要提交代码&#xff0c;提交代码时需要填写 Commit Message&#xff08;提交说明&#xff09;&#xff0c;否则就不允许提交。 所以在 Go 项目开发时&#xff0c;一个好的 Commit Message 至关重要&#xff1a; 可以使自己或者其他开发人…

基于单片机三路信号故障诊断仿真设计

单片机设计介绍&#xff0c;基于单片机三路信号故障诊断仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机三路信号故障诊断仿真设计概要主要涵盖了系统设计的整体框架、关键模块功能、仿真方法以及预期实现的目…

嵌入式硬件中常见的面试问题与实现

1 01 请列举您知道的电阻、电容、电感品牌(最好包括国内、国外品牌) ▶电阻 美国:AVX、VISHAY威世 日本:KOA兴亚、Kyocera京瓷、muRata村田、Panasonic松下、ROHM罗姆、susumu、TDK 台湾:LIZ丽智、PHYCOM飞元、RALEC旺诠、ROYALOHM厚生、SUPEROHM美隆、TA-I大毅、TMT…

ARM FVP平台的terminal窗口大小如何设置

当启动ARM FVP平台时&#xff0c;terminal窗口太小怎么办&#xff1f;看起来非常累眼睛&#xff0c;本博客来解决这个问题。 首先看下ARM FVP平台对Host主机的需求&#xff1a; 通过上图可知&#xff0c;UART默认使用的是xterm。因此&#xff0c;我们需要修改xterm的默认字体设…

【战略前沿】与中国达成生产协议后,飞行汽车即将起飞

【原文】Flying cars edge towards takeoff after Chinese production deal 【作者】Thomas Macaulay 斯洛伐克公司KleinVision签署了一项协议&#xff0c;将大规模生产AirCar。 一辆获得航空认证的飞行汽车向商业化又迈出了一大步。 空中汽车的创造者KleinVision今天宣布出售…

Java进阶-反射的详解与应用

本文深入探讨了Java反射机制的核心概念、应用实例及其在现代Java开发中的重要性。文章首先介绍了反射的基本原理和能力&#xff0c;包括在运行时动态获取类信息、操作对象字段和方法的能力。随后&#xff0c;通过具体代码示例&#xff0c;展示了如何利用反射进行字段访问、方法…

为什么有些网站会提示不安全,提示您与此网站之间建立的连接不安全

有时候当我们尝试访问一个网站时&#xff0c;浏览器会弹出一个警告&#xff0c;提示“您与此网站之间建立的连接不安全”。这是什么意思&#xff1f;这种网站真的不安全吗&#xff1f; 理解HTTP与HTTPS HTTP&#xff08;超文本传输协议&#xff09;是互联网上用于传输数据的基…

点点数据K参数加密逆向分析(RPC方案跟加密算法还原)

文章目录 1. 写在前面2. 接口分析3. 断点分析4. RPC调用5. 算法还原 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长…

苹果上架经验分享

苹果上架要求是苹果公司对于提交应用程序到苹果商店上架的要求和规定。这些要求主要是为了保证用户体验、应用程序的质量和安全性。以下是苹果上架要求的详细介绍&#xff1a;1. 应用程序的内容和功能必须符合苹果公司的规 苹果上架要求是苹果公司对于提交应用程序到苹果商店上…

备战蓝桥杯---数论基础刷题1

数论在蓝桥杯上考的不多&#xff0c;但是这不能否定它的重要性。 1.简单的GCD的应用&#xff1a; 分析一下&#xff0c;由等差数列的性质&#xff0c;个数&#xff08;an-a1)/d1&#xff0c;其中an与a1是固定的&#xff0c;因此我们就是让dmax,我们先排一下序&#xff0c;d就是…

《HelloGitHub》第 96 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 …

Redis命令请求的执行过程(二)

命令请求执行的过程 命令执行器(2):执行预备操作。 服务器已经将执行命令所需的命令实现函数(保存在客户端状态的cmd属性)、参数(保存在客户端状态的argv属性)、参数个数(保存在客户端状态的argc属性)都收集器了&#xff0c;但是在真正执行命令之前&#xff0c;程序还需要进行…

spring多线程实现+合理设置最大线程数和核心线程数

1.最简单的方法&#xff1a; 需要在 Spring Boot 主类上添加 EnableAsync 注解启用异步功能&#xff1b;需要在异步方法上添加 Async 注解。 示例代码如下&#xff1a; SpringBootApplication EnableAsync public class Application {public static void main(String[] args…

vue3+threejs新手从零开发卡牌游戏(十九):添加战斗事件

接上一节实现画线后&#xff0c;现在可以根据鼠标移动位置判断是否选中了对方区域怪兽卡牌&#xff1a; 修改game/index.vue代码&#xff0c;在画线方法中添加获取目标对象方法&#xff1a; const selectedCard ref() // 选中的场上card const selectedTargetCard ref() // …

[实验报告]--基于端口安全

[实验报告] 目录 [实验报告] 一、项目背景 二、实验环境 三、项目规划设计 四、项目实施 五、验证项目成果 基于端口安全的 Jan16 公司网络组建 一、项目背景 Jan16 公司开发部为重要部门&#xff0c;所有员工使用指定的计算机工作&#xff0c;为防止员工或访客使 用个…

手机有线投屏到直播姬pc端教程

1 打开哔哩哔哩直播姬客户端并登录(按下图进行操作) 2 手机用usb数据线连接电脑(若跳出安装驱动的弹窗点击确定或允许),usb的连接方式为仅充电(手机差异要求为仅充电),不同品牌手机要求可能不一样,根据实际的来 3 在投屏过程中不要更改usb的连接方式(不然电脑会死机需要重启) …