一个代码编辑器的构建历程——绘制的坑

编程开发   © 文章版权由 admin 解释,禁止匿名转载

#楼主# 2022-10-9


CreateJS —— 利用 rhino, apkeditor, xml2view, textwarrior, android-rhino 实现的伪 IDE
作者目前实现的功能:

1.解释 js (非编译)

2.打包 app (非编译,签名时有BUG)

3.打包 modpkg (非编译)

4.编辑器高亮,伪补全

(var 与function 声明的变量名/函数名还未实现作用域)

主题完全自定义(高亮具有 BUG,具体在正则,int,与字符串)

CreateJS:

本帖含有隐藏内容,请您 回复 后查看

就这样,我 Copy 了 CreateJS 的编辑器到我的 APP 上(有点不耻)
当时还没有买电脑,用的是 AIDE 嘛,然后一打开编辑器准备研究研究,结果愣是一个也看不懂….
(顺便吐槽 LingSaTuo ,每当我想联系他时都会是: “海不会不蓝,我不会不在,除了……”)
后面才发现 致 群的 Celivad 就是 LingSaTuo ….
然后嘛我也是感谢了他一波
现在回过头来再看看,Lexer 不就词法分析嘛,AutoCompletePanel 不就自动补全面板嘛
于是经历了一阵硬磕后,还是做出了第一个编辑器(虽然是别人的编辑器)

CideCompat 是我的第一个编辑器

可编辑和执行大部分代码, 有代码语法高亮和自动补全(已废弃)

CideCompat:
本帖含有隐藏内容,请您 回复 后查看

后面又尝试做了两个 IDE,还是失败了,应为没开源所以这里就不多叙述了
时间来到 2022 年,这一年我的 Android 技术已经算渡劫镜了
为了新 IDE Reverse (溯),我决定自己写一个编辑器
之前看到了个关于编辑器的博客,一瞬间想起来了,再次去翻,闭门造车

Sora-editor 是一款酷炫优化的安卓平台代码编辑器

由 Rosemoe 制作

Sora-editor:
本帖含有隐藏内容,请您 回复 后查看


经过一段时间的闭门造车学习,下面开始吧!

MuCodeEditor -> 一款快速渲染的代码编辑器,还在添加功能中…

这是我现在研究成功的编辑器,能高亮、自动补全,还在加功能

若你要研究的话别忘记给 Star 啊,不能白嫖好吧!

MuCodeEditor:
本帖含有隐藏内容,请您 回复 后查看


制作过程
绘制的坑

既然要写个编辑器,那我们肯定得看 Android 的绘制嘛
找到 canvas.drawText ,CTRL 按着点它!
我们看到它调用了 super.drawText,继续跟进
终于在 BaseCanvas 中找到了 drawText 方法,我们来分析分析:
在第二个 if 中,我们发现他去判断了 text 的类型
如果是 String、SpannedString、SpannableString
它就会吧它 toString 一次!
我们都知道在 onDraw 方法中尤其要小心对象的创建,如果 onDraw 中创建了对象
然后我们又频繁 invalidate 就会造成内存抖动(即上次的对象刚被 gc 这次又创建了对象,长此已往就会导致界面卡顿,如图二)

继承 View
首先你得继承自 View 吧
什么?你问我为啥不继承 EditText 或者 TextView ?
刑啊你可以自己去试试,看看到时候不卡死你
就这么和你说吧,这俩控件不能适配大文本,你文本一多就得凉
究其原因还是缓存处理问题

当然你可以继承 SurfaceView,以实现 主线程外绘制
这样做的好处很明显,就是不会影响到 APP 的正常运行
你又问我那为什么要继承 View ?
主要是之前尝试过,但是发现要一直 while(true) 去更新编辑器很难受
还有一点就是 SurfaceView 无法使用 scrollTo, scrollBy 方法
我之前就卡在处理 x 轴的滚动操作了….
当然我还是很鼓励你去继承 SurfaceView 的,谁能实现谁的编辑器起码堪比 MT 的(流畅度)

剩下的后面的帖子再说[滑稽][玫瑰]

这个帖子不错,奖励下。
板凳
小晗Dev 2022-10-10
感谢[玫瑰]

评论

登录后才可发表内容
  • 主题

    23

  • 帖子

    102

  • 关注者

    0

Copyright © 2019 凯特网.   Powered by HYBBS 2.3.4  

Runtime:0.1144s Mem:2093Kb