ActionScript绘制复杂样式按钮
MicroUI的纯AS代码绘图方式可以使Flash体积很小,但是第一个版本做得不够灵活,每套皮肤都需要自己重新实现一遍代码绘图。
新版本想做得灵活些,提供圆角、阴影、边缘、渐变效果等样式细节的定制选项,这样可能就会去掉皮肤功能,加入样式表功能。
晚上做了一个原型项目来验证可行性,用纯代码绘图,1:1仿造迅雷的皮肤下载按钮 :)
以下是效果对比:
迅雷截图 | 新绘图代码 |
---|---|
![]() |
新老绘图代码效果对比:
MicroUI 0.1版 | 新绘图代码 |
---|---|
完整代码如下:
package { import flash.geom.Matrix; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.filters.DropShadowFilter; import flash.display.Sprite; import flash.display.MovieClip; import flash.display.GradientType; /** * A prototype for MicroUI * * @author BG5SBK * @link www.microui.org */ public class MicroUI_Prototype extends Sprite { public function MicroUI_Prototype() { var matrix:Matrix = new Matrix(); var button:MovieClip = new MovieClip(); //The outter border matrix.createGradientBox(80, 23, Math.PI / 2); button.graphics.beginGradientFill(GradientType.LINEAR, [0x5BB5D8, 0x278FC6], [1, 1], [0, 255], matrix); button.graphics.drawRoundRect(0, 0, 80, 24, 8, 8); button.graphics.endFill(); //The inner border matrix.createGradientBox(78, 21, Math.PI / 2); button.graphics.beginGradientFill(GradientType.LINEAR, [0x60C8F1, 0x5AAFE7], [1, 1], [0, 255], matrix); button.graphics.drawRoundRect(1, 1, 78, 22, 6, 6); button.graphics.endFill(); //The background matrix.createGradientBox(76, 19, Math.PI / 2); button.graphics.beginGradientFill(GradientType.LINEAR, [0x44BDEE, 0x329ADE], [1, 1], [32, 255], matrix); button.graphics.drawRoundRect(2, 2, 76, 20, 4, 4); button.graphics.endFill(); //The text var text:TextField = new TextField(); text.textColor = 0xFFFFFF; text.text = "下载皮肤"; text.selectable = false; text.mouseEnabled = false; text.mouseWheelEnabled = false; text.autoSize = TextFieldAutoSize.CENTER; text.x = (button.width - text.width) / 2; text.y = (button.height - text.height) / 2; button.addChild(text); //The shadow var shadow:DropShadowFilter = new DropShadowFilter(1, 90, 0xA7BCD6, 1, 2, 2); button.filters = [shadow]; button.x = (stage.stageWidth - button.width) / 2; button.y = (stage.stageHeight - button.height) / 2; addChild(button); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2009-02-11 IHttpModule.Init方法被执行多次的原因