ArkUI-布局(一)

ArkUI-布局

  • 布局概述
    • 布局元素的组成
    • 如何选择布局
    • 布局位置
    • 对子元素的约束
  • 线性布局
    • 部分属性与使用方式
  • 层叠布局
    • 部分属性与使用方式
  • 弹性布局
    • 基本概念
    • 布局方向
    • 布局换行
    • 主轴对齐方式
    • 交叉轴对齐方式
      • 容器设置交叉轴对齐方式
      • 子元素设置交叉轴对齐方式
      • 内容对齐
    • 自适应拉伸

布局概述

布局元素的组成

在这里插入图片描述

  • 组件区域:表示组件的大小,width、height属性用于设置组件区域的大小。
  • 组件内容区:组件区域减去组件的border值,表示组件内容或子组件进行测算时的最大值。
  • 组件内容:组件内容区减去padding值,表示组件内容本身占用的大小。
  • 组件布局边界:组件区域加上margin的大小。

如何选择布局

ArkUI提供了9种常见布局

布局引用场景
线性布局(Row、Column)如果布局内子元素超过一个,并且能够以某种线性方式进行排列的,优先考虑该布局
层叠布局(Stack)组件如果需要堆叠效果的优先考虑此布局,子组件在该布局内是堆叠的,不会占用或者影响其他子组件的布局空间
弹性布局(Flex)类似于线性布局,能够使子组件压缩或者拉伸,获得更好的视觉填充效果
相对布局(RelativeContainer)通过对子组件设置锚点规则(AlignRules)使子组件能够将自己在横轴、纵轴中的位置于容器或者容器内的其他子组件的位置对齐。
栅格布局(GridRow、GridCol)栅格布局可以将空间分割为有规律的栅格,不同于网格布局的固定空间划分。栅格布局可以实现不同设备下不同的布局,显著降低适配不同屏幕尺寸的开发成本。
媒体查询(@ohos.mediaquery)媒体查询可以根据不同的设备类型或者同设备的不同状态修改应用的样式,如屏幕方向改变,重绘布局,这部分后边会展开讲一下。
列表(List)
网格(Grid)
轮播(Swiper)
选项卡(Tabs)

布局位置

定位能力使用场景实现方式
绝对定位对于不同尺寸的设备,使用绝对定位适应性较差使用position实现绝对定位,设置元素左上角相对于父容器左上角的偏移位置,不影响父布局,仅在绘制时进行位置调整。
相对定位相对于原位置进行便宜,不影响元素本身的特性使用offset实现相对定位,设置元素相对于自身的偏移量,不影响父布局,仅在绘制时进行位置调整。

对子元素的约束

对子元素的约束能力使用场景实现方式
拉伸容器组件尺寸发生变化时,增加或者减少的空间全部分配给组件内指定区域flexGrow基于父容器的剩余空间分配来控制组件拉伸,flexShrink设置父容器的压缩尺寸来控制组件压缩。
缩放父容器尺寸变化时,子组件按照预设的宽高比进行缩放aspectRatio指定当前组件的宽高比(width/height)
占比子组件的宽高按照预设的比例,随父容器进行变化两种实现方式:1.将子组件的宽高设置为父容器宽高的百分比 2.使用layoutWeight属性,使子组件自适应占满剩余空间
隐藏隐藏能力指的是,容器内的子组件,随着父容器的尺寸变化,按照预定的优先级显示或者是隐藏,相同优先级的组件,同时显示或者隐藏通过displayPriority属性来控制组件的显示和隐藏

线性布局

部分属性与使用方式

space :设置子元素在排列方向上的间距。

Column({ space: 20 }) {Text('space: 20').fontSize(15).fontColor(Color.Gray).width('90%')Row().width('90%').height(50).backgroundColor(0xF5DEB3)Row().width('90%').height(50).backgroundColor(0xD2B48C)Row().width('90%').height(50).backgroundColor(0xF5DEB3)
}.width('100%')

在这里插入图片描述
alignItems:设置子元素在交叉轴上的对齐方式。交叉轴为垂直方向时,取值为VerticalAlign,交叉轴为水平方向时,取值为HorizontalAlign

Column({}) {Column() {}.width('80%').height(50).backgroundColor(0xF5DEB3)Column() {}.width('80%').height(50).backgroundColor(0xD2B48C)Column() {}.width('80%').height(50).backgroundColor(0xF5DEB3)
}.width('100%').alignItems(HorizontalAlign.Start).backgroundColor('rgb(242,242,242)')

在这里插入图片描述

justifyContent:子元素在容器主轴上的排列方式。
FlexAlign.Start:元素向首端对齐,后续的元素向前一个元素对齐
FlexAlign.Center:第一个元素距首端与最后一个元素距尾端距离一致。
FlexAlign.End:元素向尾端对齐,前一个元素向后一个元素对齐
FlexAlign.SpaceBetween:均匀分配元素,相邻元素之间的距离是相等的,第一个元素与首端对齐,最后一个元素与尾部对齐。
FlexAlign.SpaceAround:均匀分配元素,相邻元素之间的距离是相等的,第一个元素与首端距离、最后一个元素与尾部距离是相邻元素之间距离的一半。
FlexAlign.SpaceEvenly:均匀分配元素,相邻元素之间的距离是相等的,第一个元素与首端距离,最后一个元素与尾部距离,相邻元素之间的距离都是相等的。

水平布局和垂直布局的使用方式和效果是一致的。

使用示例:

Column({}) {Column() {}.width('80%').height(50).backgroundColor(0xF5DEB3)Column() {}.width('80%').height(50).backgroundColor(0xD2B48C)Column() {}.width('80%').height(50).backgroundColor(0xF5DEB3)
}.width('100%').height(300).backgroundColor('rgb(242,242,242)').justifyContent(FlexAlign.Start)

效果图:
在这里插入图片描述

自适应拉伸:在线性布局下,常用空白填充组件Blank,在容器主轴方向自动填充空白空间,达到自适应拉伸效果。Row和Column作为容器,只需要添加宽高为百分比,当屏幕宽高发生变化时,会产生自适应效果。

@Entry
@Component
struct BlankExample {build() {Column() {Row() {Text('Bluetooth').fontSize(18)Blank()Toggle({ type: ToggleType.Switch, isOn: true })}.backgroundColor(0xFFFFFF).borderRadius(15).padding({ left: 12 }).width('100%')}.backgroundColor(0xEFEFEF).padding(20).width('100%')}
}

竖屏:
在这里插入图片描述
横屏:
在这里插入图片描述

自适应缩放:自适应缩放是指子元素随容器尺寸的变化而按照预设的比例自动调整尺寸,适应各种不同大小的设备。在线性布局中,可以使用以下两种方法实现自适应缩放。

  • 父容器尺寸确定时,使用layoutWeight属性设置子元素和兄弟元素在主轴上的权重,忽略元素本身尺寸设置,使它们在任意尺寸的设备下自适应占满剩余空间。

    @Entry
    @Component
    struct layoutWeightExample {build() {Column() {Text('1:2:3').width('100%')Row() {Column() {Text('layoutWeight(1)').textAlign(TextAlign.Center)}.layoutWeight(1).backgroundColor(0xF5DEB3).height('100%')Column() {Text('layoutWeight(2)').textAlign(TextAlign.Center)}.layoutWeight(2).backgroundColor(0xD2B48C).height('100%')Column() {Text('layoutWeight(3)').textAlign(TextAlign.Center)}.layoutWeight(3).backgroundColor(0xF5DEB3).height('100%')}.backgroundColor(0xffd306).height('30%')Text('2:5:3').width('100%')Row() {Column() {Text('layoutWeight(2)').textAlign(TextAlign.Center)}.layoutWeight(2).backgroundColor(0xF5DEB3).height('100%')Column() {Text('layoutWeight(5)').textAlign(TextAlign.Center)}.layoutWeight(5).backgroundColor(0xD2B48C).height('100%')Column() {Text('layoutWeight(3)').textAlign(TextAlign.Center)}.layoutWeight(3).backgroundColor(0xF5DEB3).height('100%')}.backgroundColor(0xffd306).height('30%')}}
    }
    

    竖屏:
    在这里插入图片描述

    横屏:

    在这里插入图片描述

  • 父容器尺寸确定时,使用百分比设置子元素和兄弟元素的宽度,使他们在任意尺寸的设备下保持固定的自适应占比。

    @Entry
    @Component
    struct WidthExample {build() {Column() {Row() {Column() {Text('left width 20%').textAlign(TextAlign.Center)}.width('20%').backgroundColor(0xF5DEB3).height('100%')Column() {Text('center width 50%').textAlign(TextAlign.Center)}.width('50%').backgroundColor(0xD2B48C).height('100%')Column() {Text('right width 30%').textAlign(TextAlign.Center)}.width('30%').backgroundColor(0xF5DEB3).height('100%')}.backgroundColor(0xffd306).height('30%')}}
    }
    

    竖屏:
    在这里插入图片描述
    横屏:
    在这里插入图片描述

层叠布局

部分属性与使用方式

alignContent:Stack支持9种对齐方式。

使用方式:Stack({ alignContent: Alignment.TopStart })

// xxx.ets
@Entry
@Component
struct StackExample {build() {Stack({ alignContent: Alignment.TopStart }) {Text('Stack').width('90%').height('100%').backgroundColor('#e1dede').align(Alignment.BottomEnd)Text('Item 1').width('70%').height('80%').backgroundColor(0xd2cab3).align(Alignment.BottomEnd)Text('Item 2').width('50%').height('60%').backgroundColor(0xc1cbac).align(Alignment.BottomEnd)}.width('100%').height(150).margin({ top: 5 })}
}

各对齐方式效果图如下:
在这里插入图片描述

Z序控制:Stack容器中子组件的显示层级关系可以通过Z序控制的zIndex属性改变,zIndex值越大,显示层级越高。

Stack({ alignContent: Alignment.BottomStart }) {Column() {Text('Stack子元素1').fontSize(20)}.width(100).height(100).backgroundColor(0xffd306).zIndex(2)Column() {Text('Stack子元素2').fontSize(20)}.width(150).height(150).backgroundColor(Color.Pink).zIndex(1)Column() {Text('Stack子元素3').fontSize(20)}.width(200).height(200).backgroundColor(Color.Grey)
}.width(350).height(350).backgroundColor(0xe0e0e0)

在这里插入图片描述

弹性布局

基本概念

Flex提供更加有效的对容器中子元素进行排列、对齐和分配剩余空间。常用于页面头部导航栏的均匀分布、页面框架的搭建、多行数据的排列等。
Flex默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴方向的尺寸成为主轴尺寸,在交叉轴方向的尺寸成为交叉轴尺寸。

在这里插入图片描述
主轴:Flex组件布局方向的轴线,子元素默认沿着主轴排列。主轴开始的位置称为主轴的起点,结束的位置称为主轴结束点。
交叉轴:垂直于主轴方向的轴线。交叉轴开始的位置称为交叉轴起点,结束的位置称为交叉轴结束点。

布局方向

在Flex中,容器的子元素可以按照任意方向排列。通过设置参数direction,可以改变主轴的方向。

  • FlexDirection.Row:默认值
  • FlexDirection.RowReverse:
  • FlexDirection.Column:
  • FlexDirection.ColumnReverse:

如图所示:
在这里插入图片描述
使用示例:

Flex({ direction: FlexDirection.Row }) {Text('1').width('33%').height(50).backgroundColor(0xF5DEB3)Text('2').width('33%').height(50).backgroundColor(0xD2B48C)Text('3').width('33%').height(50).backgroundColor(0xF5DEB3)
}
.height(70)
.width('90%')
.padding(10)
.backgroundColor(0xAFEEEE)

布局换行

Flex分为单行布局和多行布局,默认情况下是单行布局。可以通过参数warp来控制。

  • FlexWrap.NoWrap:默认值,不换行,如果子元素的宽度总和大于父元素的宽度,子元素会被压缩宽度。
  • FlexWrap.Wrap:换行,每行子元素都按照主轴方向排列。
  • FlexWrap.WrapReverse:换行,每行子元素都按照主轴的反方向排列。

主轴对齐方式

Flex通过justifyContent参数设置主轴的对齐方式,与Row和Column一致。

  • FlexAlign.Start:默认值
  • FlexAlign.Center:
  • FlexAlign.End:
  • FlexAlign.SpaceBetween:
  • FlexAlign.SpaceAround:
  • FlexAlign.SpaceEvenly:

交叉轴对齐方式

容器和子元素都可以设置交叉轴的对齐方式,子元素设置的对齐方式优先级更高。

容器设置交叉轴对齐方式

Flex通过alignItems参数设置子元素在交叉轴的对齐方式

  • ItemAlign.Auto:默认项
  • ItemAlign.Start:
  • ItemAlign.Center:
  • ItemAlign.End:
  • ItemAlign.Strech:交叉轴方向填充拉伸,在未设置尺寸时,拉伸到容器尺寸。
  • itemAlign.Baseline:交叉轴方向文本基本线对齐。

子元素设置交叉轴对齐方式

子元素通过alignSelf属性也可以设置子元素在父容器交叉轴的对齐方式,会覆盖Flex中alignItems属性的配置。

示例:

Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { // 容器组件设置子元素居中Text('alignSelf Start').width('25%').height(80).alignSelf(ItemAlign.Start).backgroundColor(0xF5DEB3)Text('alignSelf Baseline').alignSelf(ItemAlign.Baseline).width('25%').height(80).backgroundColor(0xD2B48C)Text('alignSelf Baseline').width('25%').height(100).backgroundColor(0xF5DEB3).alignSelf(ItemAlign.Baseline)Text('no alignSelf').width('25%').height(100).backgroundColor(0xD2B48C)Text('no alignSelf').width('25%').height(100).backgroundColor(0xF5DEB3)}.width('90%').height(220).backgroundColor(0xAFEEEE)

在这里插入图片描述

内容对齐

Flex可以通过alignContent参数设置子元素在交叉轴剩余空间内的对齐方式,只有在多行Flex布局中生效。

  • FlexAlign.Start:
  • FlexAlign.Center:
  • FlexAlign.End:
  • FlexAlign.SpaceBetween:
  • FlexAlign.SpacAround:
  • FlexAlign.SpaceEvenly:

自适应拉伸

Flex尺寸过小时,通过子元素的一下属性设置其在父容器中的占比,达到自适应布局。

  • flexBasis:设置子元素在父容器主轴方向上的基准尺寸,如果设置了该属性,那么子项占用的空间为该属性所设置的值,如果没有设置改属性,则子项的空间为width/height的值。

    Flex() {Text('flexBasis("auto")').flexBasis('auto') // 未设置width以及flexBasis值为auto,内容自身宽度.height(100).backgroundColor(0xF5DEB3)Text('flexBasis("auto")'+' width("40%")').width('40%').flexBasis('auto') //设置width以及flexBasis值auto,使用width的值.height(100).backgroundColor(0xD2B48C)Text('flexBasis(100)')  // 未设置width以及flexBasis值为100,宽度为100vp.flexBasis(100)  .height(100).backgroundColor(0xF5DEB3)Text('flexBasis(100)').flexBasis(100).width(200) // flexBasis值为100,覆盖width的设置值,宽度为100vp.height(100).backgroundColor(0xD2B48C)
    }.width('90%').height(120).padding(10).backgroundColor(0xAFEEEE)
    

    在这里插入图片描述

  • flexGrow:设置父容器剩余空间分配给此属性所在控件的比例。用于分配父组件的剩余空间。

    Flex() {Text('flexGrow(2)').flexGrow(2).width(100).height(100).backgroundColor(0xF5DEB3)Text('flexGrow(3)').flexGrow(3).width(100).height(100).backgroundColor(0xD2B48C)Text('no flexGrow').width(100).height(100).backgroundColor(0xF5DEB3)
    }.width(420).height(120).padding(10).backgroundColor(0xAFEEEE)
    

    在这里插入图片描述
    父容器宽度420vp,三个子元素原始宽度为100vp,左右padding为20vp,总和320vp,剩余空间100vp根据flexGrow值的占比分配给子元素,未设置flexGrow的子元素不参与“瓜分”。

    第一个元素以及第二个元素以2:3分配剩下的100vp。第一个元素为100vp+100vp * 2/5=140vp,第二个元素为100vp+100vp * 3/5=160vp。

  • flexShrink:当父容器空间不足时,子组件的压缩比例。

    Flex({ direction: FlexDirection.Row }) {Text('flexShrink(3)').flexShrink(3).width(200).height(100).backgroundColor(0xF5DEB3)Text('no flexShrink').width(200).height(100).backgroundColor(0xD2B48C)Text('flexShrink(2)').flexShrink(2).width(200).height(100).backgroundColor(0xF5DEB3)  
    }.width(400).height(120).padding(10).backgroundColor(0xAFEEEE) 
    

    在这里插入图片描述

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

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

相关文章

云端集中管控边缘服务:利用 EMQX ECP 在 K8s 上快速部署 NeuronEX

随着物联网、边缘计算技术的发展,实现边缘服务的快速部署对于分布式计算环境至关重要。它不仅可以显著降低延迟、节省带宽资源、增强数据的安全性和隐私保护,同时还能改善用户体验,支持动态变化的工作负载需求,提供更高的灵活性和…

JAVA毕业设计165—基于Java+Springboot+vue3的二手房交易管理系统(源代码+数据库+11000字论文)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3的二手房交易管理系统(源代码数据库11000字论文)165 一、系统介绍 本项目前后端分离(还有ssm版本),分为用户、卖家、管理员三种角色 1、用户&a…

TOMCAT-企业级WEB应用服务器

一 WEB技术 1.1 HTTP协议和B/S 结构 HTTP(HyperText Transfer Protocol)协议即超文本传输协议,是用于在万维网(WWW)上传输超文本内容的基础协议。 一、HTTP 协议的特点 1、简单快速 客户向服务器请求服务时&#…

leetcode234. 回文链表(java实现)

题目描述&#xff1a; 本道题的思路可以使用集合先存储链表的值&#xff0c;然后进行判断即可。 总体思路比较简单。 代码实现&#xff1a; class Solution {public boolean isPalindrome(ListNode head) {List<Integer> res new ArrayList();ListNode cur head;whil…

代谢组数据分析(十八):随机森林构建代谢组诊断模型

介绍 使用随机森林算法和LASSO特征选择构建了一种胃癌(GC)诊断预测模型。参与者(队列1,n=426)通过随机分层抽样分为发现数据集(n=284)和测试集(n=142)。接下来,在发现数据集上执行LASSO回归,以选择能够识别胃癌患者的较少数量的特征。我们将L1约束的系数设置为0.01…

OpenCV绘图函数(3)判断点一条直线是否在一个矩形范围内的函数clipLine()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 裁剪线段与图像矩形相交的部分。 cv::clipLine 函数计算出完全位于指定矩形内的线段部分。如果线段完全位于矩形之外&#xff0c;则返回 false。…

2024年小红书图文制作超火爆风格,1单19.9!趣味性插画AI表情包项目思路

今天我想跟大家分享一个每天只需花20分钟就能轻松赚钱的AI表情包项目。 这个项目在小红书上非常受欢迎&#xff0c;因为它符合小红书的用户习惯&#xff0c;而且操作简单。下面我来详细讲讲如何利用软件快速创作有趣的插画&#xff01; 项目简介 这个项目的原理很简单&#x…

计算机网络-2-tcpip协议

1.说说 TCP/IP 四层模型&#xff1f; TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;模型是一种用于描述互联网通信的协议层次结构。它分为四个主要层次&#xff0c;每个层次都定义了不同的协议来实现特定的功能。下面是TCP/IP模型各层的常用…

AES对称加密算法

1. 简介 AES是一种对称加密算法, 它有3种类型: AES-128: 密钥为128位(16字节)的AES, 加密10轮AES-192: 密钥为192位(24字节)的AES, 加密12轮AES-256: 密钥为256位(32字节)的AES, 加密14轮 密钥长度越长, 加密的强度越大, 当然与此同时开销也越大。每种类型下都有几种操作模式…

给自己复盘的tjxt笔记day9

优惠券管理 开发流程 需求分析&#xff0c;接口统计&#xff0c;数据库设计&#xff0c;创建分支&#xff0c;创建新模块&#xff08;依赖&#xff0c;配置&#xff0c;启动类&#xff09;&#xff0c;生成代码&#xff0c;引入枚举状态 优惠券管理 增删改查的业务代码&#…

NC 数组中的最长连续子序列

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给定无序数组…

前端算法 === 力扣 111 二叉树的最小深度

目录 问题描述 DFS&#xff08;深度优先搜索&#xff09;方案 BFS&#xff08;广度优先搜索&#xff09;方案 总结 力扣&#xff08;LeetCode&#xff09;上的题目111是关于二叉树的最小深度问题。这个问题可以通过深度优先搜索&#xff08;DFS&#xff09;和广度优先搜索&…

科技温柔拥抱梦乡!康姿百德柔压磁性枕舒适与科技的甜蜜邂逅

解锁未来睡眠新姿势&#xff01;康姿百德柔压磁性枕&#xff0c;科技护航每一夜好梦 在现代家居产品的设计中&#xff0c;科技与舒适性的结合越来越受到人们的关注。康姿百德柔压磁性枕正是一款将科技与舒适结合的产品&#xff0c;为现代生活注入了新的活力。 康姿百德柔压磁性…

Jmeter下载、配置环境变量

Jmeter下载 下载地址&#xff1a;Apache JMeter - Download Apache JMeter 下载后无需安装&#xff0c;解压后即可使用。解压后目录如下 配置环境变量 JMETER_HOME 环境变量Path %JMETER_HOME%\bin 环境变量CLASSPATH %JMETER_HOME%\lib 验证是否配置成功 在cmd命令窗中 输入…

JetBrains Rider 2024 for Mac/Win:跨平台.NET IDE集成开发环境的全面解析

JetBrains Rider 2024作为一款专为Mac和Windows用户设计的跨平台.NET IDE集成开发环境&#xff0c;以其强大的功能和卓越的性能&#xff0c;在.NET开发领域脱颖而出。这款IDE不仅集成了IntelliJ IDEA的代码编辑优势&#xff0c;还融合了ReSharper的C#开发体验&#xff0c;为开发…

ES6笔记总结:第四天(ES6完结)

Xmind鸟瞰图&#xff1a; 简单文字总结&#xff1a; node的模块化&#xff1a; 1.CommonJS 规范&#xff1a;Node.js 遵循 CommonJS 模块规范&#xff0c;该规范定义了如何在服务器环境中实现模块化&#xff0c;包括如何定义模块、如何引入和使用模块。 2.模块的定义&…

LabVIEW便携涡流检测系统开发

针对便携式脉冲涡流检测系统的开发需求&#xff0c;使用LabVIEW进行软件设计与实现。系统需要集成对铁磁性和非铁磁性材料的检测功能&#xff0c;并提供友好的用户界面&#xff0c;便于操作与数据读取。 硬件选型&#xff1a; 脉冲涡流主机&#xff1a; 选择理由&#xff1a; …

Vue3搜索框(InputSearch)

效果如下图&#xff1a;在线预览 APIs InputSearch 参数说明类型默认值width搜索框宽度&#xff0c;单位 pxstring | number‘100%’icon搜索图标boolean | slottruesearch搜索按钮&#xff0c;默认时为搜索图标string | slotundefinedsearchProps设置搜索按钮的属性&#xf…

Nginx反向代理B

http协议反向代理 反向代理配置参数 proxy_pass; #用来设置将客户端请求转发给的后端服务器的主机 #可以是主机名(将转发至后端服务做为主机头首部)、IP地址&#xff1a;端口的方式 #也可以代理到预先设置的主机群组&#xff0c;需要模块ngx_http_upstream_module支持 #示例:…

无人机之穿越机基础知识

一、用途与性能 主要用于竞赛、娱乐和极限飞行&#xff0c;特点是速度快、机动性强、反应灵敏&#xff0c;能够在短时间内做出迅速的加速、转向和翻滚动作&#xff0c;具有极高的飞行灵活性和第一视角飞行体验&#xff08;FPV &#xff09;。 穿越机通常体积小&#xff0c;续…