AD从原理图到PCB超详细教程
AD超详细教程
- 前言
- 一、建立一个工程模板
- 二、原理图
- 1.设计原理图。
- 2.使用AD自带库和网上开源原理图库
- 3.画原理图库
- 4.编译原理图
- 三、PCB
- 1.确定元器件尺寸大小
- 2.绘制PCB Library
- ①使用元器件向导绘制元件库
- ②原理图与PCB的映射
- 3.绘制PCB
- ①更新PCB
- ②调整元件位置
- ③布线
- ④漏线检查
- ⑤布线完整性检查
- ⑥电气规则检查(DRC检查)
- ⑦泪滴
- ⑧覆铜
- ⑨更改覆铜连接方式
- ⑩画外形层
- 总结
前言
我在学习AD的时候,看了网上很多教程,但是东西很杂,有很多条理不清而且废话很多,所以相信大家学习的时候也是遇到一样的困难。我就特地写一篇帖子,整理了一下AD从画原理图开始一直到画完PCB文件的所有步骤,一方面是供大家参考学习,另一方面可以方便我自己学习记忆更加深刻。
我用的版本是AD16中文版,大家用新的版本AD20或者AD22应该操作都是差不多的。还有就是建议大家用英文版,不要跟我一样装汉化包之类的,因为有些中文翻译非常生硬,而且CSDN上很多大佬发的博客都是英文版的AD,有时候你用中文就很难对应上每个操作。
一、建立一个工程模板
1.新建一个工程
在文件栏的new里面选择project

2.选择PCB project,然后default,名字最好起你这个工程的名字,路径最好不要包含中文。

3.工程建好了之后,里面是空的,什么都没有,所以我们需要给它添加原理图文件和PCB文件。

4.将原理图文件和PCB文件保存,通常命名为你这个原理图文件所画的模块或者电路的名字。


5.一般来说,一个大的工程都会由很多歌模块或者电路组成,所有的原理图和PCB画在一起就会显得非常拥挤,所以我们要建立Schematic Library和PCB Library,就是为主原理图和PCB文件提供库文件。
6.同样的,创建好文件之后就保存文件,尽量把她们保存在同一个文件夹中,这样使用时更好的找到它们。至此,一个包含了原理图、原理图库、PCB、PCB库的工程就建好了。

二、原理图
1.设计原理图。
这一步就是完全考验个人电路设计能力,如何根据需求设计出好的电路,这不是两三句话能说的清楚的,需要电子工程师多年的设计经验,在这里就不考虑这些。我用上星期画的一个简单地小板子举例。首先,下面是我画的一个原理图:

这原理图看起来应该挺简单的吧,实际上就是一个插头进去然后接四个小模块,然后输出从另一个插头出来,四个模块分别接地,原理就这么简单。
2.使用AD自带库和网上开源原理图库
首先,在AD自带的库里面是有很多元件的,比如常用的电阻电容电感等等,可以在下图中这两个库文件里面直接调用加入原理图中。

如果这个元件AD自带的库里面没有,那么还有一个办法,就是在嘉立创商城中去搜这个元件,嘉立创商城里面很多元件都自带原理图和PCB库,极大地方便了硬件工程师们开发设计。找到这个元件之后,点击数据手册,里面就会有这个芯片相应的原理图和PCB,而且还有这个芯片的数据手册,作为一个攻城狮,学会看数据手册是十分重要的。


嘉立创的原理图和PCB都可以导出到AD里面,相当于是直接帮你画好了这个元件,减少了工作量。

作为一个硬件攻城狮,要学会偷懒,不必每个元件都事必躬亲(●’◡’●),有一些经常会使用到的一些元件,你可以自己建一个原理图库和PCB库,然后把从立创商城学到(baipiao)的一些元件直接放在你的自建库里面,这样以后就不用每次使用到这个元件就跑到立创商城搜一遍,节省点时间。把从立创商城导出的原理图打开,然后点击右上方设计栏,选择生成原理图库。

然后直接CV大法,把这个元件库复制到你的自建库里面去,再保存,这样就可以成为你自己画的元件啦,PCB库也是同理。以后需要调用到这个原理图库或者PCB库里的元件的时候,就只需要把这些库添加到工程中去就可以啦。

选择工程然后添加现有文件到工程,再选择这些元件库的路径就能添加进去了,只需要注意一点,路径中最好不要有中文哦,不然可能会报错。
3.画原理图库
我这四个元件在AD自带的库里面是没有的,两个插头的型号在AD里面也是没有的,所以我得自己去画这两个元件的原理图库。在我之前生成的Schematic Library里面,首先放置一个矩形,因为大多数芯片都是矩形的,如果你用的是一块圆形芯片,那么就选择椭圆。

通过拖动矩形的角或者边来改变元件的大小,这个大小可以自己决定,但是我建议还是根据引脚多少来确定,最好的状态是长宽和引脚分布保持的刚刚好。
注意让引脚的名字在元件里面,标识在元件外面,双击引脚可以对其进行设置
把所有的引脚画上去,这个元件的原理图库就算完成了,记得保存,然后在原理图里面就可以调用这个元件了
把你所有需要的原理图库画好,然后用线按照电路方式连接在一起,那么这份原理图就算完成了。
4.编译原理图
在工程里面选择第一个,编译原理图,如果你的原理图有设计的不合理的地方,比如走线悬空,元件之间堆叠等等,那么AD就会给你报错,可以根据软件的报错信息来具体定位报错位置,然后做出相应的修改。

三、PCB
1.确定元器件尺寸大小
首先,你要画一个元件的封装,那就一定要知道这个元件的具体尺寸,如果你是在某宝上买的元件,那么就找卖家要资料或者数据手册,上面一定会有尺寸大小;如果你是用了一个没有资料的不知名元件,那么就得在网上搜它的型号,找它的厂家,一般厂家的官网上都会有这个元件的尺寸。下面这个是我要用的元件的尺寸图,以此来举例:
2.绘制PCB Library
①使用元器件向导绘制元件库
在PCB Library文件中,点击Tool工具栏,选择component wizard

进去点击Next,然后选择DIP封装,尺寸选择mm

根据元器件引脚的尺寸来选择焊盘大小,最好是焊盘的直径比元件引脚稍微大一点
然后这个引脚间距自己设置,需要多少就改成多少

外框宽度使用默认设置
引脚数量改成元件实际拥有的引脚数

封装名称改成元件名称,最后点击Finish,出来的元件应该是下图的样子:

如果跟你元件的尺寸和这个是符合的,那么就直接使用,由于我使用的这个原件是圆形的,所以我还得修改一下这个边框,先把矩形框删掉,然后画一个圆形框
看到这个圆形框是红色的么,因为它所在的层不对,双击圆形框,改成Top Overlay层,这样它的颜色就是黄色了
双击圆形框,然后选中圆心为中心点,这样方便你确定每个焊盘的位置和尺寸

然后你可以在右上方的工具栏随意添加焊盘,双击焊盘即可修改它的位置和尺寸。假如你不习惯用mil单位,想换成mm,那就在键盘的英文状态下按Q,就可以修改成mm制
最后的效果如下图:

②原理图与PCB的映射
绘制完PCB之后并保存,然后返回原理图界面,点击Tool工具栏,然后选择Footprint Manager

点击ADD添加封装,然后点击browse浏览,在你的PCB Library里面找到这个元件的封装,最后点击确定,把所有的元件封装都选择好后,你可以点击每一个元件,查看他们的封装是否都正确,在右下角会显示你添加的封装

确定所有元件都有封装之后,保存所有工程,然后再编译一遍工程看有没有什么问题,确定没有什么问题就可以开始画PCB了。
3.绘制PCB
①更新PCB
你可以从元件库里面一个一个的拖动并摆放所有元件,当元件不多的时候当然是没什么关系,但是当有几十上百个元器件堆放在一起,那就及其麻烦,好在AD为工程师们提供了简便的方法。点击Design工具栏,选择Update PCB Document,然后依次点击Validate Changes,Excute Changes,最后点击close


就会在右下角自动生成一块PCB板,把所有的元件选中之后拖动到黑色区域以内就行了。

这里强调两个快捷键,第一个:在原理图中查找元器件:CTRL+F,可以自己选择匹配关系进行查找;第二个:在PCB中查找元器件:J+C
②调整元件位置
框选左下角红色的背景,把它删掉,然后把元器件,整齐的排放在黑色背景内。如果黑色背景太大或者太小,可以按键盘上的数字1,然后点击Design工具栏选择Redefine Board Shape或者Edit Board Shape,更改板子尺寸,改好之后按键盘上的数字2,返回正常模式。

注意元器件之间不要重叠,然后排放的稍微有点规律,相同的元件摆在一起,这样出了问题也方便查找,元器件之间的连线也尽量让它们不要交叉太多,可以选中某一个元器件,按空格键旋转90°,或者按ctrl+x左右翻转,按ctrl+y上下翻转(注意:不要随便左右或者上下翻转器件,因为这样就相当于把器件在空间内旋转而不是平面上,结果就是你打出来的板子元件引脚跟焊盘上的引脚位置对不上,空间内旋转器件实际上就是把期间从顶层旋转到底层去,所以,不要随便上下左右翻转)。元器件之间摆放的要留有空隙,因为有些器件的尺寸不是百分百符合厂家给的尺寸,不然到时候你板子都打好了,结果放不下,那就尴尬了,所以要留有余量。

有时候当你在画一个非常复杂的PCB板,上面元器件就会非常多,你放上去之后再连线可能会看起来非常杂乱,找不到器件在哪了,这个时候就可以通过原理图选择然后快速定位到PCB上,操作方法是在原理图界面按T+C快捷键然后选择你想看的器件,在PCB界面这个器件就会高亮。

在布局布线的时候有一个小细节,就是在一个电路中一般都是不止一个元件的,也就是很多元件在一起组成的一个电路,所以在PCB中布局的时候我们最好是把功能相同或相似的元件摆在一起,但是你一个一个去拖动又很麻烦,这个时候就可以把一个电路所涉及到的元件联合起来,也就相当于是锁起来,选中一个部分的元器件,然后右键选择联合,然后选中的器件生成联合,就可以把他们变成一个整体,拖动的时候就可以一起拖动,这样布局的时候就可以减小你的工作量而且不会让这些器件弄乱。

上面讲了怎么把一个电路所用的元器件联合在一起,那么有时候一个电路可能几十个元器件,更新完PCB之后,几百个元件摆在那里,一个一个去找又十分费劲,怎么去找一个电路所用到的所有元器件呢?你更新完PCB之后的情况应该是下图这样的
那么这个时候你需要在原理图中去框选一下你想要摆放的一个电路的元器件

然后你再去PCB看,就会发现你框选的元器件呈现框选状态,这样就非常方便去寻找和选中元件,大大节省时间。

③布线
所有的元器件位置都摆放好之后,就可以开始布线,你可以一根根地连起来,当然AD也给我们提供了更简便的做法,在Auto Route工具栏选择ALL全部布线,AD就会自动帮你布好所有有连接的线。当然作为一个初学者,那么我更推荐你还是手动布线,因为你更需要的是长年累月才能积累下来的经验,而不是图个省事。
单层布线,有些线无论如何也走不通,可以使用过孔,切换到另外一个走线层。顶层与底层是不同的走线层,在布线时按小键盘区域的“*”可切换层,也可以用ctrl+shift+鼠标滚轮的方式切换层。这两种方法都可以一边布线一遍换层,效率较高。按Ctrl+鼠标左键点击走线,可以设置高亮,让你想看的线颜色比周围颜色更深。

布线完之后的PCB大概是下图这样,可以看到所有的连接点都连接了红线和蓝线,这个时候你可以再做一些细致的微调,比如电流走线要大一点,我这个模块要走大概5A的电流,所以这个宽度的走线过不了大电流,需要改大一点。

双击走线就可以设置线的宽度了,如果设置完报错的话,去布线规则里面修改一下走线的的尺寸,最大值改大一点就不会报错了,尽量让走线规律一点,条理清晰一些,这样看起来也美观。

由于我这里这个例子是一个比较简单的布线,所以非常好布,但是实际应用中,板子的尺寸相对于元器件的大小是非常有限的,如果你布线很随意,元器件之间又摆的非常开,到最后可能就放不下。所以再次强调一下,对于元件比较多,而且板子尺寸又不大的情况,在一开始元件布局的时候你就要尽量考虑到这些,还有就是哪些元件相互之间会有干扰,就不要放在一起或者隔开一点。
元件之间如果没有什么干扰情况下可以尽量摆的紧凑一点,只要丝印那块没有报错,就意味着理论上是没问题的,丝印报错了那就是挨得太近了,到时候你可能元件焊不下去。再有一个小技巧就是,你想知道一开始你的布局好不好布线或者能不能全部布完,那么布局完了之后,直接自动布线,如果自动布线能够把所有的飞线都连接上,表示你这个布局是能行得通的,如果有的飞线还是没连上,那说明你就得改改布局,如果飞线都能连上但是线看起来非常杂乱且紧密,那么根据实际情况你可以再进行微调。
④漏线检查
点击工具栏View,选择Workspace Panels,然后选择PCB,再选择PCB。

在最下面一个方框里就会出现没有连线的地方,点击就能跳转到漏线处

⑤布线完整性检查
依次点击工具栏的Reports然后Board Information,就能显示板子信息,点击Report,就会显示布线的完整情况,如果显示100%,那就代表布线没有问题了。如果不是100%,再重复前几次步骤看看哪里有问题。

⑥电气规则检查(DRC检查)
选择工具栏Tools然后点击Design Rule Check。这一步和编译原理图的目的是一样,是为了检查PCB的合理性,你需要认真查看每一个错误提示,自行决定更改还是忽略

⑦泪滴
在PCB打样的时候,泪滴的作用是:使焊盘更结实、接触面积更大、增加导通的可靠性。在焊接时候可以保护焊盘,避免多次焊接时焊盘的脱落,生产时可以避免蚀刻不均,过孔偏位出现的裂缝等。在工具栏Tools点击Teardrops,设置使用默认的就可以了


⑧覆铜
点击工具栏Place然后选择Polygon Pour多边形覆铜,设置相应参数然后点击OK,在PCB上选择覆铜区域。在Top层和Bottom层都需要覆铜。


当你在后期需要修改PCB或者你在看别人的PCB时,大面积的覆铜会非常影响你的视线,可以按Ctrl+D来隐藏覆铜,这样能更清晰地看到内部走线。

如果你想看某一层的元件,按键盘上Shift+S快捷键,然后选择PCB层就可以查看单层。


⑨更改覆铜连接方式
覆铜后发现焊盘处是以十字方式连接的,这个时候点击工具栏Design再点击Rules,找到Plane–>Polygon Connect Style–>PolygonConnect,把ConnectStyle改为Direct Connect,再重新覆铜,可以和之前的效果对比一下,就明白这样做的目的和原因了。当然具体选择哪种方式还需要根据实际情况而定。
⑩画外形层
在Keepout Layer层下选择Place然后Keepout然后Track,然后点击合适的位置,确定板子的外形尺寸就可以了。

总结
花了几天时间集中学习了AD软件的操作,在画板过程中虽然还是有很多不会的地方,但是参考了CSDN上众多大佬的设计经验和技巧,如果文章有什么错误的地方,欢迎指正。总算是完成了一个简单的PCB,之前的布局和走线很丑,在大佬的帮助下也算是把走线和布局都调整的稍微好看一点,后面还会做更多这方面的设计,慢慢的锻炼自己吧!
这篇文章我后面还会慢慢更新的,我学到一点就记录一点,分享一下自己的学习过程吧,大家有兴趣的可以收藏着,陆续还会更新新的知识。
创作不易,三连鼓励!
相关文章:
AD从原理图到PCB超详细教程
AD超详细教程 前言一、建立一个工程模板二、原理图1.设计原理图。2.使用AD自带库和网上开源原理图库3.画原理图库4.编译原理图 三、PCB1.确定元器件尺寸大小2.绘制PCB Library①使用元器件向导绘制元件库②原理图与PCB的映射 3.绘制PCB①更新PCB②调整元件位置③布线④漏线检查…...
2023.11.20使用flask做一个简单图片浏览器
2023.11.20使用flask做一个简单图片浏览器 功能: (1)输入指定路径,打开文件夹 (2)判断文件格式为图片 (3)在前端进行预览 (4)使用bootstrap进行简单美化 ma…...
https和http的区别和优势
大家好,我是咕噜-凯撒,HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)是用于在网络上传输数据的协议,HTTPS相比HTTP在数据传输过程中更加安全可靠,适合对数据安全性要求较高的场景…...
Docker 启动alpine镜像中可执行程序文件遇到 not found
## 1. 问题: docker alpine镜像中遇到 sh: xxx: not found 例如: 在容器内/app/目录下放置了可执行文件abc,启动时提示not found /app/startup.sh: line 5: ./abc : not found ## 2. 原因 由于alpine镜像使用的是musl libc而不是gnu libc&am…...
.net对接阿里云CSB服务
public Response<string> Main(MonthPlanRequest request){string apiName "MonthPlan", postData request.ToJson(); var result ConnectCSB(apiName, postData);return InvokeResult.Fail<string>("访问成功");}/// <summary>///…...
Json数据格式
json比较可读,通过键值对返回。实现通常有两种方式:一种是自己来构造,也就是用一个对象存储数据,在最后输出时将其json字符串化;第二种是使用 RestController 注解实现json数据返回。 第一种 导入依赖坐标: <depe…...
Kafka-Producer
1、生产者 从编程的角度而言,生产者是一个消息的生产者,它负责创建消息并发送到Kafka集群中的一个或多个topic中。 1.1、客户端开发 一个正常的生产逻辑需要具备以下几个步骤: 配置生产者客户端参数及创建相应的生产者实例构建待发送的消…...
Ubuntu20上离线安装samba
如果联网,一条 sudo apt-get install samba就可能解决问题,但是没有网,那么只能一个一个的解决问题: 我以为装了samba-common就可以了,发现smbd.serverice not found,于是开始了漫长的下载依赖包,安装&…...
【开源】基于Vue.js的教学过程管理系统
项目编号: S 054 ,文末获取源码。 \color{red}{项目编号:S054,文末获取源码。} 项目编号:S054,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2…...
【C++】泛型编程 ⑪ ( 类模板的运算符重载 - 函数实现 写在类外部的不同的 .h 头文件和 .cpp 代码中 )
文章目录 一、类模板的运算符重载 - 函数实现 写在类外部的不同的 .h 头文件和 .cpp 代码中1、分离代码 后的 友元函数报错信息 - 错误示例Student.h 头文件内容Student.cpp 代码文件内容Test.cpp 代码文件内容执行报错信息 2、问题分析 二、代码示例 - 函数实现 写在类外部的不…...
动手学深度学习——循环神经网络的简洁实现(代码详解)
文章目录 循环神经网络的简洁实现1. 定义模型2. 训练与预测 循环神经网络的简洁实现 # 使用深度学习框架的高级API提供的函数更有效地实现相同的语言模型 import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2lbatch_size, …...
19.删除链表的倒数第 N 个节点
题目来源: leetcode题目,网址:19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) 解题思路: 使用双指针找到倒数第 N1 个节点后删除链表的第 N 个节点即可。注意当 N 为链表长度时,倒数第 N1 …...
机器人制作开源方案 | 莲花灯
1. 功能描述 莲花灯是一款基于莲花形象设计的机器人,本文示例将用两种模式来实现莲花灯的亮灭功能。 自主模式:用 光强传感器 控制莲花灯的灯叶开合。暗光情况下灯叶打开,灯亮;强光情况下灯叶闭合,灯灭。 …...
华为无线ac+fit三层组网,每个ap发射不同的业务vlan
ap管理dhcp在ac控制器上,业务dhcp在汇聚上 配置WLAN业务 (1)配置VAP模板 • 配置员工网络的VAP模板(employee) [AC-wlan-view] security-profile name employee //创建名为“employee”的安全模板 [AC-wlan-sec-prof-…...
人工智能:科技之光,生活之美
在科技飞速发展的今天,人工智能已经深入到我们的生活中,它如同一束璀璨的科技之光,照亮我们生活的每一个角落,使我们的生活更加美好。下面我将从人工智能的领域、应用以及对人工智能的看法三个方面来谈谈它对我们生活的影响。 一、…...
mysql8.0英文OCP考试第61-70题
Q61.You wish to protect your MySQL database against SQL injection attacks. Which method would fail to do this? A)using stored procedures for any database access B)using PREPARED STATEMENTS C)installing and configuring the Connection Control plugin ( …...
WaveletPool:抗混叠在微小目标检测中的重要性
文章目录 摘要1、简介2、相关研究2.1、微小物体检测2.2. 抗锯齿过滤器3、方法3.1. Wavelet Pooling3.2 一致顺序的Wavelet Pooling的WaveCNet3.3、Bottom-Heavy Backbone4、实验4.1、预训练数据集4.2、微小目标检测数据集4.3、抗混叠方法的选择及应用顺序4.4、小波的选择4.5、T…...
文章系列2:Unraveling the functional dark matter through global metagenomics
这篇文章发布于2023年10月nature。通讯作者是来自于 DOE Joint Genome Institute, Lawrence Berkeley National Laboratory, Berkeley, CA, USA. 背景介绍&目标 作者首先背景介绍了两种主流宏基因组分析方法,包括reads-based reference mapping(eg…...
ubuntu 20.04 搭建crash dump问题分析环境
ubuntu 20.04 搭建crash dump问题分析环境 1 安装依赖软件1.1 linux-dump1.2 kexec-tools1.3 安装crash工具1.4 安装gdb调试工具1.5 安装ubuntu内核调试符号1.5.1 GPG 秘钥导入1.5.2 添加仓库配置1.5.3 更新软件包1.5.4 下载和安装内核调试符号1.5.5 验证内核调试符号已经被安装…...
算法训练营一刷 总结篇
今天就是Day60了,坚持了两个月的算法训练营在今天结束了。这两个月中,学习、练习了许许多多的算法,坚持每天完成博客来打卡,养成了写C的习惯,现在相比于Python我反而更喜欢思路严谨的C。感谢这个平台,感谢C…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...
