mac怎么选择截图

mac怎么选择截图,第1张

1 系统自带快捷键命令

cmd+shift+3:对整个屏幕进行截图

cmd+shift+4:对自行选择的区域进行截图;

cmd+shift+4+space(空格键):对选定的某个应用程序界面窗口进行截图。

以上快捷键截屏之后都会自动保存到桌面上变成一个。而且某个Mac版本之后,截屏完一段时间右下角会出现悬浮窗点开可以马上对截屏进行编辑,就类似iPhone的 *** 作。

如果只是想截屏到剪贴板,而不留下桌面截屏。上面所有的命令都加上Ctrl即可:

cmd+Ctrl+shift+3:对整个屏幕进行截图到剪贴板;

cmd+Ctrl+shift+4:对自行选择的区域进行截图到剪贴板;

cmd+Ctrl+shift+4+space(空格键):对选定的某个应用程序界面窗口进行截图到剪贴板。

如果又想从剪贴板变成,可以打开“预览程序”,选择 文件->从剪贴板新建:

然后保存成即可。

如果要对截屏进行简单的编辑处理也可以点开画笔工具(带圈的笔头图标)进行处理:

2 工具截屏

如果要对整个网页进行截屏 *** 作,那就需要借助工具了。(程序猿还可以用Chrome的较新版本打开`开发者工具`(command+Shift+P)里面输入Capture *** 作,或者安装截屏插件)

笔者用过一个工具:

Snipsnipqqcom

注意:这个工具和 Mac AppStore上下载的是不一样的,这个有滚动截屏功能。

有些朋友安装完之后发现无法打开滚动截屏功能是因为需要给Snip授权:

当你安装完之后打开Snip设置,勾选“启动滚动截屏”:

有时候会不知道跳到什么界面。其实只需要打开系统偏好设置,在下图对应地方打勾即可:

如何滚动截屏?

截屏时选定窗口区域后只需单击鼠标,整个页面便可完美呈现。

1、全屏截图的快捷键组合是:Command+Shift+3,截图后文件自动生成到桌面,如果你想要截图到剪贴板,可以使用快捷键组合:Command+Control+Shift+3 截图后文件自动保存在剪贴板,你可以到相关应用程序里面使用快捷键:Command+V进行粘贴。

2、区域截图的快捷键组合是:Command+Shift+4,截图后文件自动生成在桌面,如果你想要截图到剪贴板,可以使用快捷键组合:Command+Control+Shift+4截图后文件自动保存在剪贴板,你可以到相关应用程序里面使用快捷键:Command+V进行粘贴。

3、另外我们还可以对活动窗口截图,对活动窗口截图的快捷键组合是:Command+Shift+4+空格键截图后文件自动生成在桌面。如果你想要截图到剪贴板,可以使用快捷键组合:Command+Control+Shift+4 +空格键 截图后文件自动保存在剪贴板,你可以到相关应用程序里面使用快捷键:Command+V进行粘贴。

4、使用浏览器的截图功能

如果你的电脑上安装了360浏览器,那么请打开你的浏览器,如下图所示,这里有一个截图的功能,只要点击这个按钮,就可以对电脑桌面的任何位置进行截图。当然,这里也有快捷键,图中显示的“Ctrl+Shift+X”就是快捷键。

5、使用专业截图软件:HyperSnap7等 

这是一款老牌的屏幕截图工具,不仅能抓取标准桌面程序,还能抓取 DirectX, 3Dfx Glide的 游戏视频或DVD 屏幕图。能以20多种图形格式(包括:BMP, GIF,JPEG, TIFF, PCX等)保存并阅读。可以用快捷键或自动定时器从屏幕上抓图。

编程有很多领域,应该先从你兴趣开始,有兴趣再决定编程领域,有了编程领域在决定语言不同的语言对应着不同编程领域,只有确定这些信息了,才知道要看什么书籍。如果你要学完那是有点不现实因此你要回想一下你兴趣来源是什么比如喜欢做黑客,喜欢研究反病毒,喜欢为Windows桌面开发一些实用的小软件等等要分析好兴趣来由,在决定你的发展方向,就好了比如你喜欢为WINDOWS开发软件,那么 C语言是必备基础,学好好了然后在扩展一门面向对象的语言比如C++ C# JAVA 等这些是不错的选择。然后光有语言不行,为了软件的质量保证,还需要研究一下系统理论基础,这样你的软件才能做到对系统的作家兼容性和获取最佳性能。

也可百度一下, 80x86汇编小站 这个网站里面有几篇关于编程入门文章或许会对你有帮助, 或者 你直接联系 这个站长 跟他交流编程方面的事情

首先是windows这块。主要就是开发些桌面小程序,插件,辅助工具什么的。都很小。还有上位机也用vc的比较多。MFC要学好。不过这块的话现在是费力不讨好,工资不高的,但我觉得还不怎么简单。

然后就是unix下面的,这方面都是大型的管理系统,比如银行这些。这个待遇都比较好,主要是服务的对象都很是有钱的客户。UNIX要懂点,数据库,STL。

还有就是用c++写点上层的驱动,主要是用到串口通信。

还有图像,视频处理 这个我不了解。

其实你自己可以多到智联,51job上面去看,那些公司招聘的要求,任职资格等。选好自己想要的工作方向。然后肯定自己要多学习的。

一、先列三个常见的开发场景:

1、拿到一个模块详细设计文档,大部分程序员的通常做法就是开始搭建界面代码,然后从第一个按钮点击事件或页面Load事件开始写第一行业务代码。写的差不多了,就运行一下,发现哪里不是自己想的那样,就改改,直到改到是自己预想的那样。

2、做完了一个功能模块或几块相关联的功能模块,输入111asd,发现新建正常、保存正常,就提交给测试人员。测试员用测试用数据、测试场景用例来测试,发现有问题,就登记bug。对于严重的影响下一步测试的BUG,测试员就用内部IM通知这个开发人员。对于不影响继续往下测试的BUG,测试员就登记下来,等程序员有空时处理。

3、程序员一般工作不希望大家打扰,所以开发起来就是开发。等手头开发告一段落,就看看BUG库。发现有与自己有关的BUG,就从第一个BUG开始看起。就开始通过IM和测试员掰扯起来(这不是个BUG啊、业务逻辑不是你想的那样啊、我这里不能重现啊、你给的信息描述不清晰啊),于是IM几来几往,甚至跑过去当面交流一番,甚至会拉扯上产品经理一起讨论,更甚者需要项目经理或产品经理发起一个会议来集体讨论一下

这是不是很熟悉呢看这就是大部分程序员开发的三个步骤:写代码、自测、修复BUG。

二、说好的代码设计、代码测试呢看

代码设计看那不是都有开发平台么,已经固化了啊。那不是维护旧功能做完善修改呢么,又不是写新代码,只能在现有代码基础上修改啊,你又不能大幅重构。

代码测试看你丫需求讨论期、产品设计期、设计评审期那么长,都把研发项目时间占光了,就留下2个星期让我们写代码,我们哪里有时间搞那么深的测试。还想让我们搞结对编程看还想让我们搞测试驱动开发看

而且你看测试,什么功能测试、集成测试、性能测试、安全测试、安装部署测试、升级测试、迁移测试、UAT测试,一大堆测试,测试也需要很多时间。

一个项目,需求讨论、产品范围规划与评审、产品设计与设计评审占了一个半月,开发+自测就一个月,测试占了一个半月,这就4个月了啊。

三、为啥程序员写代码总是写写测测看

刚才大家也都看到了,大部分程序员都是从界面代码开始写起,而且写一写,就运行一下看看。为什么会是这种开发方式看

那是因为大部分程序员缺乏在脑子中的整体建模能力。只能做出来一点,真实的感觉一下,然后再往下。

有些是产品经理的上游就有问题,没给出业务流程图(因为产品经理也没做过业务),也没画清楚产品功能 *** 作流程图。

为啥没给出业务流程图看因为产品经理不熟悉业务,另外,产品经理也没有流程建模能力啊。为啥没画清楚产品功能 *** 作流程图啊看因为不会清晰表达流程啊。

很多产品经理、程序员,都缺乏分类、分层、相关、先后能力,更别说总结、洞察能力。

这是基本训练,是一个做事头脑清醒的人必备的技能,这不是一个程序员或产品经理或测试员的特定技能要求。

我经常看书就梳理书的脉络,每看一本就写一篇总结。我过去闲扯淡还梳理过水浒传、红楼梦的人物关系图呢,其实就在事事上训练自己的关联性、层次性、洞察性。

我经常面试一个人时,我会问这样的问题:逗你把我刚才说的话复述一遍,另外你再回答一下我为什么会这样看地,其实,我就在看一个人的细心记忆、完整梳理、重现能力,我也在看一个人的梳理、总结、洞察能力。

我个人写代码就喜欢先理解业务流,然后理解数据表关系,然后理解产品功能 *** 作流,大致对功能为何这样设计、功能这样 *** 作会取什么表、插入或更新哪些表,哪些表的状态字段是关键。

然后我写代码的时候,就根据我所理解的业务流、功能 *** 作流、数据输入输出流,定义函数,定义函数的输入与输出。

然后,我会给函数的输入值,赋上一些固定值,跑下来看看能否跑通这几个关联函数,看看还需要怎样的新增函数,或者看看函数的输入输出参数是否满足跑通。

剩下的事,就是我填肉写详细逻辑代码了。

当然,大部分人没我这样的逻辑建模能力。怎么阅读理解也想象不出来,也没法定义函数。毕竟有逻辑建模能力的程序员都很少,100个人里有10个,已经是求爷爷告奶奶好幸运了。

那怎么办呢看

我建议是分离分工配合,这就是现实中没办法的办法。让有逻辑建模能力的人来设计函数框架、来设计工具来设计代码模板,然后让没有逻辑建模能力的人来填肉写详细逻辑代码。

我们可以先从最紧要的模块开始这么做。不紧要的模块,还让它放任自流,让熟练手程序员继续涂抹。

我曾经还让有头脑的程序员做榜样,给大家分享他是怎么规划函数的,怎么做维护性代码的代码结构改善的。但是发现效果并不佳,其他人并没有因此能做代码设计。可能逻辑建模能力是个人的基本素质,是从小到大训练成型的,不是你一个大学已经几年的人能够短时间内可以训练的。

所以啊,还是让能走的人先走,让从最紧要的模块开始这么做。

不必担心这样做后,因为过去一件事被分工(一个做代码框架一个填肉)成两个人做了会降低工作效率。我们很多的工作效率低就是因为半瓶子醋搞出来的,来回反复修改。

真是应了刘德华在**里说的那句话:说你又不听,听又听不懂,听懂了又不做,做又做不好,做不好还不服气。

四、为什么大部分程序员不做代码测试或白盒测试或单元测试呢看

还是因为没有代码设计。因为没有函数啊。所以,一个按钮功能有多复杂,代码就有多长。我见过2000行的函数,我也见过1000多行的存储过程和视图SQL。怎么做白盒测试啊,这些代码都粘在一起呢,要测,就得从头到尾都得测。

所以啊,先学会设计函数,先写好函数,这就求爷爷告奶奶了。很多开发了5年的熟练手程序员,可能都未必会写函数。

函数的输入输出值就很有讲究。很多人都写死了,随着版本迭代,发现过去定义的函数参数不够用了,于是就新增了一个参数。然后,相关性异常就爆发了,其他关联的地方忘改了,到底哪些有关联,怎么查啊,本系统没有,没准其他系统就调用你了,你根本不知道哪个神经人曾经COPY过你的代码修吧修吧就改成了他的功能呢,而且里面的很多代码他看不懂也不敢删,只要他实现的功能正常了他也不管了。于是,你改了你这个函数,他的系统就莫名出错了。

所以,我一般会定义几个对象来做参数。另外,我也很注重函数的日志、函数的异常保护、异常抛出、异常返回。另外,我也很注重参数输入值的合法性校验。

所以啊,应该开发Leader们先制定函数编写规范最佳实践,输入输出参数怎么定义比较好,函数的返回值如何定义比较好,函数的日志记录应该怎么写比较好,函数的异常保护、异常抛出、异常返回如何写比较好。先教会一般程序员,先从会写函数开始啊。

当然,你光有一份规范,程序员们还是不理解、不实际应用啊。所以,还得Leader们做好典型的代码模板,里面是符合函数规范的代码框架,只有这样,一般程序员们才会照猫画虎适应了函数设计的编程习惯。

所以啊,我专门重新定义了leader的明确职责,其中第一个重要职责就是:负责工具/框架/模板/规范的制定,并且负责推广且普及应用落地。

你不明确定义Leader的这个重要职责,你不对这个职责做明确的KPI考核,谁尿你啊。你以为好的工具/框架/模板/规范是靠人们的热情、自发产生的么看我们还没有那么自觉高尚啊。

五、为什么大部分程序员不写注释啊看

我经常说一句话,千万别多写注释。为啥看

因为我们经常遇到的问题不是没有注释,而是更糟的是,注释和事实代码逻辑是不相符的。这就出现常见问题了:残存下来的设计文档是一个逻辑、注释是一个逻辑说明、真实代码逻辑又是一个,钟表多了,你也不知道正确时间了。

所以啊,产品文档、注释、真实代码,三者总是很难一致同步。我为了几百人研发团队能做到这个同步花了大量心血和办法,但我最终也没解决了这个问题,还把Leader们、总监们、我都搞的精疲力尽。

索性回归到一切一切的本源,代码,就是程序员的唯一产出,是最有效的产出。那么,让代码写的不用注释也能看懂,咱得奔着这个目的走啊。

为啥看不懂,不就是意大利面条式代码么,又长又互相交杂。

OK,我就规定了,每个函数不能超过50行。用这一个简单规定和静态代码检查插件,来逼迫大家尝试着写函数。有的函数属于流程函数,是串起其他函数的,有的函数就是详细实现函数,实现一个且唯一一个明确作用的。

有了流程函数和功能函数,而且每个函数不超过50行,这就比过去容易看懂了。

六、为什么大部分程序员不抽象公共函数啊看

我经常说一句话:千万别抽象公共函数啊。为啥看

因为大部分程序员缺乏抽象洞察能力。特别是有些积极热情有余、爱学习爱看书、半瓶子醋晃悠的二杆子,看了几本UML、重构、设计模式、整洁代码之道,就跃跃欲试了,还真敢给你抽象公共函数了。

一开始,他觉得80%相似,20%不相似,于是在公共函数里面简单写几个ifelse做个区隔就可以。没想到,越随着版本迭代,这些功能渐渐越变越不一样了,但是这个代码已经几经人手了,而且这是一个公共函数,谁也不知道牵扯多少,所以谁也不敢大改,发现问题了就加一个ifelse判断。

没想到啊没想到,这个本来当初公共的函数,现在变成了系统最大的毒瘤,最复杂的地方,谁也不敢动,除非实在万不得已,手起刀落。

所以,我平时告诫程序员,纯技术的、纯通用的,你们可以尝试搞搞抽象公共函数,对于业务的,你们还是简单粗暴的根据Leader们做的代码模板代码框架,乖乖的复制、修改、填肉吧。

你们啊,先从做模板做代码片段开始吧,咱们放到咱们内部代码片段开源库里,看谁的代码片段被别人复制的多,说明你的代码抽象设计能力越好了。那时候,我就大胆放心让你撒丫子跑了。在没有学会跑之前,给老子乖乖的复制、修改、填肉吧。

1介绍

在使用Android Studio开发的时候,大部分人都会使用一些插件来提高开发效率,比如:

ButterKnife 自动生成注解代码

PermissionsDispatcher 更方便的进行Android 60权限处理

像这样的插件还有很多很多,但我们不能一直停留在用的程度,这样太不符合程序猿的风格了,今天就让我们自己动手来写一个插件,当以后自己有好的想法的时候,也能写一个出色的插件给大家使用。

想到以前写系统原生dialog的时候还要写一大串代码,简直太麻烦,今天就用这个做例子,写一个插件来实现一键生成dialog代码。

注:本文只是为了熟悉Android Studio插件开发,所以用一个比较简单的例子来演示。

2环境搭建

首先需要安装IntelliJ IDEA

安装完成后,运行起来是这个样子的:

IntelliJ IDEA

点击Create New Project新建一个Plugin项目,填写项目名称,选择位置就可以点击finish了。

New Project

项目结构如下图所示:

项目结构

src目录下建包,和平时使用Android Studio的方式是一样的。

到这里,环境就搭建成功了(^-^)V

3编写插件

新建Action

在新建的包下建一个Action类

New Action

然后填写一些信息

填写信息

ActionID:Action唯一的ID,一般的格式为:pluginNameID

ClassName:类名

Name:插件最终显示在菜单上的名称

Description:对这个Action的描述信息

然后往下,选择插件在菜单中的位置,这里选择的是Code菜单下第一的位置,然后定义一个快捷键。

点击OK,就创建了一个Action类了,

public class CreateDialogAction extends BaseGenerateAction {

public CreateDialogAction() {

super(null);

}

public CreateDialogAction(CodeInsightActionHandler handler) {

super(handler);

}

@Override

public void actionPerformed(AnActionEvent e) {

}

}

注意把继承的AnAction改成BaseGenerateAction,下文需要用到BaseGenerateAction类中的相关方法。

代码实现

主要实现在类中自动生成代码,首先获取相关的 *** 作类,已在代码中加入注释说明。

public class CreateDialogAction extends BaseGenerateAction {

public CreateDialogAction() {

super(null);

}

public CreateDialogAction(CodeInsightActionHandler handler) {

super(handler);

}

@Override

public void actionPerformed(AnActionEvent e) {

// 获取编辑器中的文件

Project project = egetData(PlatformDataKeysPROJECT);

Editor editor = egetData(PlatformDataKeysEDITOR);

PsiFile file = PsiUtilBasegetPsiFileInEditor(editor, project);

// 获取当前类

PsiClass targetClass = getTargetClass(editor, file);

// 获取元素 *** 作的工厂类

PsiElementFactory factory = JavaPsiFacadegetElementFactory(project);

// 生成代码

new LayoutCreator(project, targetClass, factory, file)execute();

}

}

生成代码,需要继承WriteCommandActionSimple类,在run方法中写生成代码的逻辑,将生成dialog的代码存入StringBuilder,然后调用targetClass类中的add方法生成代码,最后再导入需要的类。

public class LayoutCreator extends WriteCommandActionSimple {

private Project project;

private PsiFile file;

private PsiClass targetClass;

private PsiElementFactory factory;

public LayoutCreator(Project project, PsiClass targetClass, PsiElementFactory factory, PsiFile files) {

super(project, files);

thisproject = project;

thisfile = files[0];

thistargetClass = targetClass;

thisfactory = factory;

}

@Override

protected void run() throws Throwable {

// 将d出dialog的方法写在StringBuilder里

StringBuilder dialog = new StringBuilder();

dialogappend("public void showDialog(){");

dialogappend("androidsupportv7appAlertDialogBuilder builder = new AlertDialogBuilder(this);");

dialogappend("buildersetTitle(\"Title\")\n");

dialogappend("setMessage(\"Dialog content\")\n");

dialogappend("setPositiveButton(\"OK\", new androidcontentDialogInterfaceOnClickListener() {\n" +

"@Override\n" +

"public void onClick(DialogInterface dialog, int which) {\n" +

"\t\n" +

"}" +

"})\n");

dialogappend("setNegativeButton(\"Cancel\", new DialogInterfaceOnClickListener() {\n" +

"@Override\n" +

"public void onClick(DialogInterface dialog, int which) {\n" +

"\t\n" +

"}" +

"})\n");

dialogappend("show();");

dialogappend("}");

// 将代码添加到当前类里

targetClassadd(factorycreateMethodFromText(dialogtoString(), targetClass));

// 导入需要的类

JavaCodeStyleManager styleManager = JavaCodeStyleManagergetInstance(project);

styleManageroptimizeImports(file);

styleManagershortenClassReferences(targetClass);

}

}

点击编译器右上角的绿色Run按钮,会重新启动一个新的IntelliJ IDEA的界面,在这里创建一个Android工程,点击Code,会看到Android Dialog选项,看下效果:

Android Dialog

OK,到这里我们就成功的创建了一个插件,下面让我们来看看如何来部署插件。

4部署插件

填写相关信息

打开项目中的pluginxml文件,填写相关的信息,这些信息会展示在插件库中,如下图所示。

plugin

点击Bulid菜单下的Prepare Plugin按钮会在项目的根目录生成jar插件,如下图所示:

生成插件

安装插件

打开Andorid Studio,选择File -> Settings -> Plugins -> Install plugin from disk,选择我们生成的jar然后重启即可,如下图所示,红框标记的部分就是我们刚才在pluginxml文件中填写的信息:

安装插件

发布插件

还可以把插件发布到仓库,让其他人也能使用,进入 JetBrains 官网,注册账号,提交插件jar包,填写相关信息,等待审核就可以了。

5遇到的问题

安装插件的时候出现下面的报错,是因为IDEA中jdk的版本是18,而我的Android Studio中jdk的版本是17导致的,版本统一就好了。

Android Dialog threw an uncaught PluginException

6总结

总结一下之前的步骤:

下载Intellij IDEA,新建一个Intellij Platform Plugin的项目(注意jdk版本的问题,最新的IDEA需要jdk 18版本)

在项目中新建一个Action,把继承的AnAction改成BaseGenerateActio

编写API,这个可以参考其他插件的写法

点击Bulid菜单下的Prepare Plugin按钮生成jar,这个jar就可以直接用来安装了

当一个项目从非国际化(只有单言语类型)转向国际化(多语言支持)亦或项目过于庞大Module数量众多每期迭代都需要从各个Module抽取和填补翻译时就会有了个很烦恼的事情,这么多的语言资源靠手动整理那得到猴年马月,等整理完也练就了一双麒麟臂了。(以上纯属抱怨可忽略)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10211034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存