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

【Android】View—基础知识,滑动,弹性滑动

基础知识

什么是View

在 Android 中,View 是用户界面(UI)中的基本组件,用于绘制图形和处理用户交互。所有的 UI 组件(如按钮、文本框、图片等)都是 View 的子类。可以说,View 是构建 Android 应用界面的基础。

View 是一种界面层的控件的一种抽象,它代表了一个控件。除了 View 还有 ViewGroup ,里面包含了许多个控件,即一组 View 。在Android设计中,ViewGroup 也继承了 View ,也就意味着 View 本身可以是单个控件也可以是由多个控件组成的一组控件。

View的位置参数

View 的位置主要由它的四个顶点决定:top、left、right、bottom,top是左上角纵坐标,left是左上角横坐标,right是右下角横坐标,bottom是右下角纵坐标。这些坐标都是相对于 View 的父容器来说的,是一种相对坐标。

width = right - left

height = bottom - top

Left = getLeft()

Right = getRight()

Top = getTop()

Bottom = getBottom()

从Android3.0开始,View增加了额外的几个参数:x、y、translationX、translationY,其中x和y是View左上角的坐标,translationX和translationY是View左上角相对于父容器的偏移量。

y = top + translationY

MotionEvent 和 TouchSlop

  1. MotionEvent

    MotionEvent 是 Android 中用于描述触摸屏幕的事件类。当用户在屏幕上进行触摸操作(如点击、滑动、拖动等)时,系统会生成一个 MotionEvent 对象并传递给相应的 View 的触摸事件处理方法(例如 onTouchEvent())。

MotionEvent 的主要方法和常量:

  • 常用事件类型(通过 getAction() 获取):
    • ACTION_DOWN:表示手指刚刚触碰屏幕,此时可以记录触摸的起始坐标。
    • ACTION_MOVE:表示手指在屏幕上移动,通常用于检测滑动、拖动等操作。
    • ACTION_UP:表示手指离开屏幕,通常在这里结束触摸操作或触发点击事件。
    • ACTION_CANCEL:表示触摸事件被中断,比如手指从屏幕上滑动到不可触摸区域。
  • 坐标获取
    • getX()getY():获取事件发生点相对于当前 View 的 x 和 y 轴坐标。
    • getRawX()getRawY():获取事件发生点相对于屏幕的绝对 x 和 y 轴坐标。
  • 多点触控MotionEvent 支持多点触控,可以通过 getPointerCount() 来获取触控点数量,或通过 getPointerId(int index) 来获取特定触控点的 ID。

MotionEvent 使用场景

MotionEvent 通常用于实现复杂的手势或触控效果,比如检测滑动方向、双指缩放、拖动等。通过组合 ACTION_DOWNACTION_MOVEACTION_UP 的坐标变化,可以实现自定义的滑动或手势检测逻辑。

  1. TouchSlop

    TouchSlop 是一个阈值,用于判断用户的触摸是否足够显著,足以被认为是“滑动”而不是“轻微抖动”或“点击”。在触摸屏幕时,有时用户会产生轻微的抖动,而 TouchSlop 的作用就是过滤掉这种无意的微小移动。

    • TouchSlop 的值在设备中是固定的(基于屏幕密度),可以通过 ViewConfiguration.get(context).getScaledTouchSlop() 来获取。
    • TouchSlop 的单位是像素,通常的使用方式是当手指移动距离超过 TouchSlop 时,才认为这是一个有效的滑动操作。

TouchSlop 使用场景

TouchSlop 常用于判断滑动是否开始,例如在处理自定义滑动手势时,可以使用以下伪代码来判断滑动:

// 假设 downX 和 downY 是手指按下时的初始坐标
float deltaX = currentX - downX;
float deltaY = currentY - downY;if (Math.sqrt(deltaX * deltaX + deltaY * deltaY) > touchSlop) {// 开始滑动
}

使用 TouchSlop 可以避免在轻微抖动时触发滑动,从而提高手势的识别精度。

VelocityTracker、GestureDetector和Scroller

在 Android 中,VelocityTrackerGestureDetectorScroller 是处理触摸事件和手势操作的三个常用工具,适用于实现复杂的滑动、手势识别、惯性滚动等效果。以下是对它们的介绍和应用场景:

  1. VelocityTracker

    VelocityTracker 用于追踪触摸事件的移动速度,特别是在实现滑动和快速滑动手势(如快速滑动删除、甩动等)时非常有用。

    • 主要方法

      • addMovement(MotionEvent event):将当前的触摸事件加入到 VelocityTracker 中,用于计算滑动速度。
      • computeCurrentVelocity(int units):计算速度,units 参数通常设为 1000,表示每秒的像素速率。
      • getXVelocity()getYVelocity():获取 x 和 y 方向的滑动速度,返回值是每秒的像素速度。
      • clear():清除 VelocityTracker 中的事件。
    • 使用场景:通常在实现滑动或甩动删除功能时会用到,例如根据手指的滑动速度来判断是否应触发滑动效果。

速度 = (终点位置 - 起点位置) / 时间段

示例代码

VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);
velocityTracker.computeCurrentVelocity(1000);
float xVelocity = velocityTracker.getXVelocity();
float yVelocity = velocityTracker.getYVelocity();
  1. GestureDetector

    GestureDetector 用于检测标准的手势操作,例如单击、双击、长按、滑动等。它简化了常见手势的识别,不需要手动计算每个 MotionEvent 的位置和时间。

    • 常用手势方法

      • onSingleTapUp(MotionEvent e):单击。
      • onLongPress(MotionEvent e):长按。
      • onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):滑动。
      • onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):快速滑动。
      • onDoubleTap(MotionEvent e):双击。
    • 使用场景GestureDetector 可以简化各种常见手势的实现,适用于需要检测点击、长按、双击等的场景。例如在图片查看应用中实现缩放或拖拽手势。

    示例代码

    GestureDetector gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {@Overridepublic boolean onSingleTapUp(MotionEvent e) {// 单击事件return true;}@Overridepublic void onLongPress(MotionEvent e) {// 长按事件}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {// 滑动事件return true;}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {// 快速滑动事件return true;}
    });// 在触摸事件中使用 GestureDetector
    @Override
    public boolean onTouchEvent(MotionEvent event) {return gestureDetector.onTouchEvent(event);
    }
    
  2. Scroller

    Scroller 是 Android 中用于实现滚动和惯性滑动的工具类。它本身不会滚动 View,而是提供计算滚动位置的接口,通常与 ViewcomputeScroll() 方法结合使用。

    • 主要方法

      • startScroll(int startX, int startY, int dx, int dy, int duration):设置起点、滚动距离和持续时间。
      • fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY):使用速度(通常配合 VelocityTracker)和边界来实现甩动效果。
      • computeScrollOffset():判断滚动是否完成,用于在 computeScroll() 方法中进行判断。
      • getCurrX()getCurrY():获取当前滚动位置。
    • 使用场景:通常用于实现平滑滚动效果,如实现自定义滑动 View,滑动菜单等。在 ScrollView 中,Scroller 可用于实现惯性滚动效果。

    示例代码

    Scroller scroller = new Scroller(context);// 触发滚动
    scroller.startScroll(0, 0, deltaX, deltaY, 1000);// 在 View 中重写 computeScroll 方法
    @Override
    public void computeScroll() {if (scroller.computeScrollOffset()) {scrollTo(scroller.getCurrX(), scroller.getCurrY());invalidate(); // 刷新界面,继续执行滚动}
    }
    

View的滑动

使用scrollTo/scrollBy

下面是scrollTo和scrollBy的源码:

public void scrollTo(int x, int y) {if (mScrollX != x || mScrollY != y) {int oldX = mScrollX;int oldY = mScrollY;mScrollX = x;mScrollY = y;invalidateParentCaches();onScrollChanged(mScrollX, mScrollY, oldX, oldY);if (!awakenScrollBars()) {postInvalidateOnAnimation();}}}public void scrollBy(int x, int y) {scrollTo(mScrollX + x, mScrollY + y);}

可以看到scrollBy实际上也调用了scrollTo方法,实现了基于当前位置的相对滑动,而scrollTo实现了基于所传递参数的绝对滑动。

View 边缘是指 View 的位置,由四个顶点组成,而 View 内容边缘是指 View 中的内容的边缘,scrollToTo和scrollBy只能改变 View 内容的位置而不能改变 View 在布局中的位置。mScrollX和mScrollY的单位为像素,并且当 View 左边缘在 View 内容左边缘的右边时,mScrollX为正值,反之为负值;当 View 上边缘在View内容上边缘的下边时,mScrollY为正值,反之为负值。换句话说,如果从左向右滑动,那么mScrollX为负值,反之为正值;如果从上往下滑动,那么mScrollY为负值,反之为正值。

image-20241110102031436

改变布局参数

ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) button.getLayoutParams();
params.width += 100;
params.leftMargin += 100;
button.requestLayout();

可以通过改变LayoutParams的方式去实现View的滑动。

弹性滑动

使用Scroller

实现平滑滚动:

public class SmoothScrollView extends View {private Scroller scroller;public SmoothScrollView(Context context) {super(context);scroller = new Scroller(context);}// 定义平滑滚动到指定位置的方法public void smoothScrollTo(int destX, int destY) {int deltaX = destX - getScrollX();  // x方向滚动的距离int deltaY = destY - getScrollY();  // y方向滚动的距离// 设定滚动参数scroller.startScroll(getScrollX(), getScrollY(), deltaX, deltaY, 1000);  // 1秒滚动完成invalidate();  // 触发重绘}@Overridepublic void computeScroll() {if (scroller.computeScrollOffset()) {scrollTo(scroller.getCurrX(), scroller.getCurrY());postInvalidate();  // 保持刷新}}
}

通过动画

使用动画来实现滑动天然就具有弹性效果,下面代码可以让一个View100ms内向右移动100像素:

ObjectAnimator.ofFloat(button, "translationX", 0, 100).setDuration(100).start();

如果模仿Scroller来实现View的弹性滑动,利用动画的特性,我们可以采用如下方式:

final int startX = 0;
final int deltaX = 100;
ValueAnimator animator = ValueAnimator.ofInt(0, 1).setDuration(1000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(@NonNull ValueAnimator animation) {float fraction = animator.getAnimatedFraction();button.scrollTo(startX + (int)(deltaX * fraction), 0);}
});
animator.start();
  • startX 表示按钮的初始水平滚动位置,这里设为 0

  • deltaX 表示滚动的水平距离(即目标位置与起始位置的差距),设为 100。在动画过程中,按钮内容的滚动位置会从 startX 移动到 startX + deltaX

  • ValueAnimator.ofInt(0, 1) 创建了一个整数类型的 ValueAnimator 对象,该对象的值从 0 变为 1,并且 setDuration(1000) 设置动画的持续时间为 1 秒(1000 毫秒)。

    这里将动画的数值范围设定为 01,这意味着动画本身并不依赖具体的值变化,而是利用动画的进度来计算滚动的距离。

  • addUpdateListeneranimator 添加了一个更新监听器 AnimatorUpdateListener。在动画进行过程中,每一帧都会回调 onAnimationUpdate() 方法。
  • onAnimationUpdate() 方法中,使用 animator.getAnimatedFraction() 获取当前动画的完成度(即已运行时间占总时间的百分比)。这个完成度 fraction 是一个 01 的小数,0 表示动画刚开始,1 表示动画结束。
  • button.scrollTo(startX + (int)(deltaX * fraction), 0);:调用 scrollTo() 方法,将按钮内容沿水平轴滚动到 startX + (int)(deltaX * fraction) 位置。
    • deltaX * fraction 表示当前滚动的位置,每一帧会根据完成度 fraction 计算当前的滚动距离,使得滚动效果在整个动画持续时间内平滑进行。
    • 例如,当 fraction0.5 时,滚动的位置为 startX + deltaX * 0.5 = 50,即按钮内容滚动到距离初始位置 50 的位置。

已经到底啦!!

相关文章:

【Android】View—基础知识,滑动,弹性滑动

基础知识 什么是View 在 Android 中,View 是用户界面(UI)中的基本组件,用于绘制图形和处理用户交互。所有的 UI 组件(如按钮、文本框、图片等)都是 View 的子类。可以说,View 是构建 Android …...

MYSQL中的两种转义操作

在 MySQL 中,转义字符用于处理特殊字符,以防止语法错误或 SQL 注入攻击,而单双引号都是需要重点注意的字符 可以用转义符\ 和 两个连续的引号 来起到转义引号的作用 转义符转义: 这是users表中的数据 如果查询admin 或者 admin" 用户,可以用转义符\ 两个连…...

力扣题目解析--删除链表的倒数第n个节点

题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]示例 3&…...

Knowledge Graph-Enhanced Large Language Models via Path Selection

研究背景 研究问题:这篇文章要解决的问题是大型语言模型(LLMs)在生成输出时存在的事实不准确性,即所谓的幻觉问题。尽管LLMs在各种实际应用中表现出色,但当遇到超出训练语料库范围的新知识时,它们通常会生…...

Android 项目模型配置管理

Android 项目配置管理 项目模型相关的配置管理config.gradle文件:build.gradle文件: 参考地址 项目模型相关的配置管理 以下是一个完整的build.gradle和config.gradle示例: config.gradle文件: ext {// 模型相关配置&#xff0…...

「QT」几何数据类 之 QSizeF 浮点型尺寸类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...

Essential Cell Biology--Fifth Edition--Chapter one(2)

1.1.1.3 Living Cells Are Self-Replicating Collections of Catalysts 催化剂集合 生物最常被引用的特性之一是它们的繁殖能力。对于细胞来说,这个过程包括复制它们的遗传物质和其他成分,然后分裂成两个,产生一对子细胞[daughter cells]&a…...

大语言模型LLMs在医学领域的最新进展总结

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 相比其他学科,医学AI,是发表学术成果最多的领域。 医学数据的多样性和复杂性(包括文本、图像、基因组数据等),使得…...

云防护单节点2T抗攻击能力意味着什么?

随着互联网的发展,DDoS攻击的规模和频率不断增加,对企业和个人用户的网络服务造成了严重威胁。云防护服务作为一种高效的DDoS防护手段,逐渐成为许多企业的首选。本文将重点讨论云防护单节点2T(太比特每秒)抗攻击能力的…...

IDEA在编译时: java: 找不到符号符号: 变量 log

一、问题 IDEA在编译的时候报Error:(30, 17) java: 找不到符号符号: 变量 log Error:(30, 17) java: 找不到符号 符号: 变量 log 位置: 类 com.mokerson.rabbitmq.config.RabbitMqConfig 二、解决方案 背景:下载其他同事代码时,第一次运行&#xff0c…...

HTML 基础架构:理解网页的骨架

HTML的文档结构主要由以下几个部分组成&#xff1a;<html>、<head>和<body>。 <html>标签是HTML文档的根元素&#xff0c;用来包裹整个HTML文档的内容。<head>标签用于定义文档的头部&#xff0c;包含了一些元数据和其他不直接显示在页面上的内…...

FPGA学习笔记#5 Vitis HLS For循环的优化(1)

本笔记使用的Vitis HLS版本为2022.2&#xff0c;在windows11下运行&#xff0c;仿真part为xcku15p_CIV-ffva1156-2LV-e&#xff0c;主要根据教程&#xff1a;跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 从这一篇开始正式进入HLS对C代码的优化笔记 目录 1.循环优化中的基…...

web实操4——servlet体系结构

servlet体系结构 我们基本都只实现service方法&#xff0c;其余几个都不用&#xff0c; 之前我们直接实现servlet接口&#xff0c;所有的方法都必须实现&#xff0c;不用也得写&#xff0c;不然报错&#xff0c;写了又不用当摆设。 能不能只要定义一个service方法就可以&…...

Linux开发讲课48--- Linux 文件系统概览

本文旨在高屋建瓴地来讨论 Linux 文件系统概念&#xff0c;而不是对某种特定的文件系统&#xff0c;比如 EXT4 是如何工作的进行具体的描述。另外&#xff0c;本文也不是一个文件系统命令的教程。 每台通用计算机都需要将各种数据存储在硬盘驱动器&#xff08;HDD&#xff09;…...

Node.js 模块详解

模块的概念 Node.js 运行在 V8 JavaScript 引擎上&#xff0c;通过 require() 函数导入相关模块来处理服务器端的各种进程。一个 Node.js 模块可以是一个函数库、类集合或其他可重用的代码&#xff0c;通常存储在一个或多个 .js 文件中。 例如&#xff0c;启动一个 Node.js 服…...

大厂面试真题-说说tomcat的优缺点

Tomcat作为服务器&#xff0c;特别是作为Java Web服务器&#xff0c;具有一系列优点和缺点。以下是对其优缺点的详细分析&#xff1a; 优点 开源免费&#xff1a; Tomcat是一个免费、开源的Web服务器&#xff0c;用户可以在任何环境下自由使用&#xff0c;无需支付任何费用。…...

Linux系统编译boot后发现编译时间与Windows系统不一致的解决方案

现象 如下图&#xff0c;从filezilla软件看虚拟机Linux中编译的uboot.img修改时间与Windows系统时间不同 解决过程 在Linux中查看编译的uboot详细信息&#xff0c;从而得到编译时间。终端输入ls -l后&#xff0c;如下图&#xff1a; 结论 说明在Linux是按照Windows系统时…...

WPS Office手机去广高级版

工具介绍功能特点 WPS Office是使用人数最多的移动办公软件&#xff0c;独有手机阅读模式&#xff0c;字体清晰翻页流畅&#xff1b;完美支持文字&#xff0c;表格&#xff0c;演示&#xff0c;PDF等51种文档格式&#xff1b;新版本具有海量精美模版及高级功能 安装环境 [名称…...

Python爬虫基础-正则表达式!

前言 正则表达式是对字符串的一种逻辑公式&#xff0c;用事先定义好的一些特定字符、及这些特定字符的组合&#xff0c;组成一个“规则的字符串”&#xff0c;此字符串用来表示对字符串的一种“过滤”逻辑。正在在很多开发语言中都存在&#xff0c;而非python独有。对其知识点…...

Python处理PDF组件使用及注意事项

在 Python 中处理 PDF 文件时&#xff0c; 使用的组件及注意事项如下&#xff1a; 1. PyPDF2 / PyPDF4 说明&#xff1a; PyPDF2 和 PyPDF4 都是功能强大的 PDF 操作库&#xff0c;适用于合并、拆分、旋转 PDF 文件&#xff0c;提取 PDF 元数据等。PyPDF4 是 PyPDF2 的一个分…...

langgraph_plan_and_execute

整体入门demo 教程概览 欢迎来到LangGraph教程&#xff01; 这些笔记本通过构建各种语言代理和应用程序&#xff0c;介绍了如何使用LangGraph。 快速入门&#xff08;Quick Start&#xff09; 快速入门部分通过一个全面的入门教程&#xff0c;帮助您从零开始构建一个代理&a…...

[代码随想录打卡Day8] 344.反转字符串 541. 反转字符串II 54. 替换数字

反转字符串 难度&#xff1a;易。 问题描述&#xff1a;编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 这个就是开头…...

DCN DCWS-6028神州数码 AC 设备配置笔记

DCN DCWS-6028神州数码 AC 设备配置笔记 一、前期准备 PC 电脑网络配置 目的:使 PC 能够访问 AC 的 web 管理控制台。配置详情:web 管理控制台地址为 192.168.1.10,将 PC 电脑 IP 地址配置在 192.168.1.1 - 192.168.1.254 网段内,如 192.168.1.110,子网掩码 255.255.255.…...

Go语言的常用内置函数

文章目录 一、Strings包字符串处理包定义Strings包的基本用法Strconv包中常用函数 二、Time包三、Math包math包概述使用math包 四、随机数包&#xff08;rand&#xff09; 一、Strings包 字符串处理包定义 Strings包简介&#xff1a; 一般编程语言包含的字符串处理库功能区别…...

华为OD技术一面手撕题

150. 逆波兰表达式求值 来自leecode 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 、-、* 和 / 。每个操作数&#xff08;运算对象&#xff09;都…...

Qt低版本多网卡组播bug

原文地址 最近在某个项目中&#xff0c;发现了一个低版本Qt的bug&#xff0c;导致组播无法正常使用&#xff0c;经过一番排查&#xff0c;终于找到了原因&#xff0c;特此记录。 环境 Qt&#xff1a;5.7.0 mingw32操作系统&#xff1a;windows 11 现象 在Qt5.7.0版本中&…...

Leetcode:540. 有序数组中的单一元素

题目 给你一个仅由整数组成的有序数组&#xff0c;其中每个元素都会出现两次&#xff0c;唯有一个数只会出现一次。 请你找出并返回只出现一次的那个数。 你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。 输入: nums [1,1,2,3,3,4,4,8,8] 输出: 2 输入:…...

Python数据分析NumPy和pandas(二十七、数据可视化 matplotlib API 入门)

数据可视化或者数据绘图是数据分析中最重要的任务之一&#xff0c;是数据探索过程的一部分&#xff0c;数据可视化可以帮助我们识别异常值、识别出需要的数据转换以及为模型生成提供思考依据。对于Web开发人员&#xff0c;构建基于Web的数据可视化显示也是一种重要的方式。Pyth…...

数组指针和指针的区别

区分数组指针和指针数组 int *p[3]和 int (*p)[3] 根据运算符的优先级&#xff0c;"[]"的优先级是高于“*”的&#xff0c;p就会先与[]结合&#xff0c;那么它本质就是数组&#xff0c;数组内存放的是指针&#xff0c;它叫指针数组。&#xff08;int*p[3]&#xff…...

Linux git-bash配置

参考资料 命令提示符Windows下的Git Bash配置&#xff0c;提升你的终端操作体验WindowsTerminal添加git-bash 目录 一. git-bash配置1.1 解决中文乱码1.2 修改命令提示符 二. WindowsTerminal配置git-bash2.1 添加git-bash到WindowsTerminal2.2 解决删除时窗口闪烁问题 三. VS…...

丹阳疫情最新消息今天新增/昆明网络推广优化

http://liuzhijun.iteye.com/blog/1872241 virtualenv virtualenv用于创建独立的Python环境&#xff0c;多个Python相互独立&#xff0c;互不影响&#xff0c;它能够&#xff1a; 1. 在没有权限的情况下安装新套件 2. 不同应用可以使用不同的套件版本 3. 套件升级不影响其他应用…...

布局网站建设/成都网站seo收费标准

今天下午面试的很郁闷&#xff0c;自己语速过快&#xff0c;表达不清楚&#xff0c;容易激动&#xff0c;以后要改善。 1、反转字符串&#xff0c;保留原先位置的大小写&#xff0c;如 AbCd 反转后为DcBa void reverseStr(char* str){if(str NULL) return;int len 0;while(*(…...

discuz 科技网站模板/手机网站模板下载

简介:KubeSphere是一个灵活的轻量级容器PaaS平台&#xff0c;通过了CNCF一致性认证&#xff0c;100%开源&#xff0c;由社区驱动与开发。KubeSphere可以部署并运行在任何基础架构以及所有版本兼容的Kubernetes集群之上&#xff0c;包括虚拟机、物理机、数据中心、公有云和混合云…...

专业的营销型网站/产品推广软文500字

一、【问题描述】 在一个请求分页系统中&#xff0c;假如一个进程的页面访问为&#xff1a;3,3,1,3,2,3,0,2,1,2,3,0,1,1&#xff0c;当分配该进程的物理块数M为3 时&#xff0c;分别采用先进先出FIFO置换算法和最近最久未使用LRU置换算法&#xff0c;计算访问过程中所发生的缺…...

外贸汽车网站制作/网络营销外包推广定制公司

水环境检测系统的设计与实现 摘 要 在我国,水源的污染是不可忽视的问题。对于水质监测进行数据的采集工作,目前主要通过人工实现。因此,部分地区的采集工作,实施起来难度很大,比如恶劣环境和偏僻山区等地。所以,目前对于水质监测的研究,主导方向是建立更加高效完善,智能化的水质…...

flash网站建设技术.../搜索引擎优化方法与技巧

如果先安装AndroidSDK&#xff0c;进到解压缩路径里tools目录下运行./android升级的android api版本&#xff0c;在随后eclipse安装完&#xff0c;adt安装完&#xff0c;添加路径的时候会不识别。因此最好的安装顺序是&#xff1a;1&#xff0c;安装jdk2&#xff0c;安装eclips…...