首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Flutter使用Canvas实现精美表盘效果

为了方便后续使用长、宽、半径等长度,创建对应的成员变量,同时为了适配不同表盘宽高,保证展示效果一致,在绘制时直接使用数值,而使用比例长度: /// 画布宽度 late double width; //...画布默认旋转点位左上角,所以需要通过 canvas.translate(width/2, height/2) 将旋转点移动到表盘的中心点,然后每绘制完一个刻度画布旋转 2*pi/60 的角度,即 6 度...90°、180°、270° ,效果如下: 通过画布旋转实现了我们想要的效果,接下来就是让指针根据时间旋转相应的角度。...5 份,因为角度的起始是在右侧中心点,所以获取的小时需要减 3,再加上分钟、秒钟占小时的比例;同理分别计算分钟、秒钟的角度,最终实现时针、分针、秒针根据当前时间展示。...角度计算对了以后,还需要刷新整个表盘,即每秒钟刷新一次,刷新时获取当前时间重新绘制时针、分针、秒针的位置,实现动态效果,这里使用 Timer 每一秒钟调用父布局的 setState 实现。

1.4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    canvas绘制动画原理及案例讲解(绘制小恐龙动画、时钟等)

    绘制原理 清屏→更新→渲染 在canvas之前,在web端绘制动画都是用Flash实现的,但是Flash漏洞很多,还必须安装插件(记不记得小时候玩一些小游戏和播放视频时提示要下载flash插件),Flash...canvas的出现颠覆了Flash的地位,无论是广告、游戏都可以用canvas实现,Canvas是一个轻量级的画布,在使用canvas绘制的时候,一旦绘制成功,就会像素化它们,canvas没有再次从画布上得到这个图形的能力...,没有能力再去修改已经画在画布上的内容,这也是canvas比较轻量的原因。...显示器有固定的刷新频率(60Hz或75Hz),也就是说,每秒最多只能重绘60次或75次,requestAnimationFrame的基本思想就是与这个刷新频率保持同步,利用这个刷新频率进行页面重绘。...此外,使用这个API,一旦页面处于浏览器的当前标签,就会自动停止刷新。这就节省了CPU、GPU和电力。 不过有一点需要注意,requestAnimationFrame是在主线程上完成。

    3.2K30

    Python Tree库绘制多叉树的用法介绍

    每一个分支的参数也是一个列表或元组,参数中需要两个数据,第一个表示树枝相对于父枝干的长度变化系数(一般小于1,树枝比树干短),第二个表示树枝相对于父枝干的偏移角度角度是弧度制(数字角度可以用math库中的...sigma是一个元组(列表也可以,不过会提示不符合PEP规范),元组中有两个值,第一个用于调整分支的长度,第二个用于调整分支的角度(乘math中的pi)。...第二个参数表示画布的大小(按像素计算),因为树从树干生长后,尺寸会变化,所以使用get_size()动态获取当前树的尺寸。第三个参数表示画布的颜色,默认值为0,黑色画布,可以根据需要修改。...get_branch_length(): 返回指定年龄的枝干长度,指定年龄则返回树叶的长度。指定的年龄可以无限(会根据变化系数推导结果)。...指定的年龄可以无限(会根据分支数推导结果)。 nodes属性表示当前树中的所有节点对象,每个年龄的节点构成一个列表。

    1.8K20

    博后被顶会ACL拒稿,只因arXiv迟交半小时?学者圈震怒,发誓再也投ACL

    新智元报道 编辑:编辑部 【新智元导读】一篇出色的ACL论文,竟因为匿名期后半小时上传到arXiv就被拒?ACL引来了一波声讨! ACL,惹众怒了!...既然一定要拒,那为什么第一周拒,非要让投稿人等上几个月?」 「还有一个奇怪的地方是,匿名期是1个月,而不是30天。如果是在下一个月,你的论文或许就没问题了......」...原因有很多,总之,模型学者们不会再参加ACL和ICML了。」 「现在,理由又多了一个。」 CVPR禁令:审稿期禁止宣传 其实,类似的禁令,也不是第一次出现了。...同时,在社交媒体上拥有众多追随者的V们会借此获得更大的舆论优势,降低了大众对评审制度公平性的信任,也会影响科学界内部的互信。 这项禁令一出,社区炸锅,反对者众。

    34520

    《Android游戏编程之从零开始》笔记「建议收藏」

    unlockCanvasAndPost函数用于解锁画布和提交 d。刷新画布 第一种 每次绘图之前,绘制一个等同于屏幕大小的图形覆盖画布上。...6.SurfaceView视图添加线程 固定时间刷新画布比如倒计时、动态花草、流水、怪物、钱币等。 设计一个线程不停去重绘画布,实时更新游戏元素状态。...2)优点:支持音乐文件播放,不需要加载准备时间。 SoundPool优缺点 1)缺点:短音频文件。最大1M空间。不要轻易使用pause和stop方法,容易造成程序莫名终止。...第二种:触点位置在大圆外,小圆中心在大圆的圆周上,但小圆所在大圆上的角度,应该等同于用户触点位置相对于大圆的角度。...弧度-角度:body.getAngle()/180*Math.PI; 角度-弧度:body.getAngle()/Math.PI*180 遍历body World.getBodyCount()

    1.3K21

    我做了一个在线白板!!!

    clearCanvas();// ++ allElements.forEach((element) => { element.render(); }); } 恭喜矩形们成功出生~ 成长 修理它 小时候被爸妈修理...,按住了旋转手柄则进行矩形的旋转操作,按住了其他的四个角的操作手柄之一则进行矩形的大小调整操作。...它想去看看,确实,屏幕就这么,矩形肯定早就待腻了,作为万能的画布操控者,让我们来满足它的要求。...我们新增两个状态变量:scrollX、scrollY,记录画布水平和垂直方向的滚动偏移量,以垂直方向的偏移量来介绍,当鼠标滚动时,增加或减少scrollY,但是这个滚动值我们直接应用到画布上,而是在绘制矩形的时候加上去...导出图片不能简单的直接把画布导出就行了,因为当我们滚动或放大后,矩形也许都在画布外了,或者只有一个小矩形,而我们把整个画布都导出了也属实没有必要,我们可以先计算出所有矩形的公共外包围框,然后另外创建一个这么画布

    3.6K31

    手把手教你写一个经典躲避游戏

    然后就可以开始引入我们的游戏主体对象了 这里直接使用 index.ts 来编写游戏内容是为了后续方便增加 UI 界面。...额外需要注意的点是每次重新绘制前都需要先清空画布。 这样我们的画布就以每秒 60 帧的速度在刷新了(虽然现在只有个灰色背景看不出差别。...这样我们就能获取到角度了(这里顺便把目标也随机偏移了下,不然直勾勾的就往目标去就很僵硬) 有了角度之后,简单运用一下高中的三角函数知识,就能很轻松的把我们的速度分成水平速度和垂直速度了。...,就是画两个圆,一个是的背景圆,一个是玩家目前移动方向的摇杆圆。...花了不到半个小时完成了兼容移动端,所以一个完善的代码结构和清晰的代码逻辑是非常重要的,能使后续的维护和功能迭代也变得很轻松。

    1.3K20

    代码写过300张可视化,为什么建议你用报表工具开发数据屏?

    如何汇总,数据的口径,指标的定义,数据的实时性刷新率,用哪些硬件设备,屏如何设计,还有性能等后端问题都是需要考虑的。我是做技术的,就从技术角度来说说。...相比如代码开发,数据传递,构建画布,设计布局,缩放组件,组件动效等都需要一行一行代码开发,回头适配硬件时还要一个个调。...另外,屏需要投到LED电子屏上,不同屏幕的分辨率往往不同,这就需要在开发的时候针对分辨率进行调整以保证呈现效果,这个是最费时间的,以前用代码定制基本要话50%的时间去调试。...另外,数据屏实时显示的刷新频率很高,这就要求后台的数据处理能力足够强以确保前端数据变化的频率可以满足需要。...原因三:开发效率和维护成本相对低 上述有提过,用报表工具FineReport开发数据屏效率高,主要体现在: 操作拖拽零代码: 画布式界面,组件拖拽式操作,可实现组件内刷新(局部刷新),支持组件隐藏,支持组件堆叠

    1.3K40

    数码照片处理基本技法

    更改照片画布大小 图像|画布大小(Alt+Ctrl+C) ?...旋转照片制作特效 画布大小,相对 图像|图像旋转 编辑|变换|水平翻转 移动,新建图层 选择|修改|羽化,Alt+Delete 填充前景色 ?...在信息面板中可以看到倾斜的角度值。 图像|图像旋转|任意角度 ? 自动矫正照片颜色 ?...调整曝光不足的照片 图像|调整|阴影/高光 调整曝光过度的照片 曲线(图层面板下方) ? 去除照片中的噪点 滤镜|杂色|减少杂色 锐化模糊的照片 滤镜|锐化|USM锐化,结合通道使用,效果更佳。...本文由来源 jackaroo2020,由 javajgs_com 整理编辑,其版权均为 jackaroo2020 所有,文章内容系作者个人观点,代表 Java架构师必看 对观点赞同或支持。

    1.2K30

    试着换个角度理解低代码平台设计的本质

    图片本文会主要分享自己对低代码平台的理解,从多个角度和问题去看低代码平台的设计。我觉得低代码平台的核心在于模型设计,包括控件模型、组件模型、画布模型等等。...低代码平台的业务场景涉及越来越广泛:自定义表单、页面制作、活动详情页、工作流场景、数据报表、屏数据报表、数据表格、白板笔记等等。...图片假设这么一个场景:掘金社区的主页布局比较单一,当需要增加或调整部分模块时,需要改动项目代码、打包、提测、发布,这时候如果能有一个主页设计平台,让运营人员自由调整页面布局,还可以针对不同节日、活动调整出不同主页布局...以「事件模型信息」为例,当页面中配置了一个按钮,这个按钮往往可以做如下事情:打开链接;打开弹框;打开 APP;刷新页面;发送请求;等等。...即低代码平台中数据来源,通常按照业务需求可以将数据源分为两类:静态数据源:数据绑定在页面配置中,在最终效果页时,直接使用页面配置中的数据,无需通过接口获取数据;动态数据源:一般是保存数据源的接口在配置中,绑定数据

    1.2K40

    用Kotlin实现抖音爆红的文字时钟,征服产品小姐姐就靠它了(上)

    这是我当时截图下来的参考,先分析下涉及到的元素及样式表现: 「圆中信息」圆中心的数字时间+数字日期+文字星期几,始终为白色 「时圈」一圈文字小时,一点、二点..十二点,当前点数为白色,其它为白色+透明度...然后分析下动画效果: 每秒钟「秒圈」走一下,这一下的旋转角度为360°/60=6°,并且走这一下的时候有个线性旋转过去的动画效果。 每分钟「分圈」走一下,旋转角度和动画效果跟「秒圈」相同。...每小时「时圈」走一下,旋转角度为360°/12=30°,动画效果同上。 绘制静态图 1. 画布准备 基本是将画布背景填充黑色,然后将画布的原点移动到View大小的中心,这样方便思维理解与绘制。...画「时圈」「分圈」「秒圈」 绘制思路就是for循环12次,每次将画布旋转30°乘以i,然后在指定位置绘制文字,12次后刚好一个圆圈。...mSecondDeg = -360 / 60f * (second - 1) invalidate() } } 然后只需在Activity中使用timer每秒钟刷新一次

    1.2K10

    你不知道的Mac屏幕显示图像

    显示器通常以固定频率进行刷新,这个刷新率就是 VSync 信号产生的频率。尽管现在的设备大都是液晶显示屏了,但原理仍然没有变。...如果对象涉及 UI 操作,则尽量放到后台线程去创建,但可惜的是包含有 CALayer 的控件,都只能在主线程创建和操作。...常见的文本控件 (UILabel、UITextView 等),其排版和绘制都是在主线程进行的,当显示大量文本时,CPU 的压力会非常。...尽管这实现起来非常麻烦,但其带来的优势也非常,CoreText 对象创建好后,能直接获取文本的宽高等信息,避免了多次计算(调整 UILabel 大小时算一遍、UILabel 绘制时内部再算一遍);CoreText...图像的绘制 图像的绘制通常是指用那些以 CG 开头的方法把图像绘制到画布中,然后从画布创建图片并显示这样一个过程。这个最常见的地方就是 [UIView drawRect:] 里面了。

    2K70

    「Adobe国际认证」Adobe Photoshop调整裁剪、旋转和画布大小

    原标题:「Adobe国际认证」Adobe Photoshop调整裁剪、旋转和画布大小 裁剪并修齐扫描过的照片 可以在扫描仪中放入若干照片并一次性扫描它们,这将创建一个图像文件。...任意角度按指定的角度旋转图像。如果您选取此选项,请在角度文本框中输入一个介于 -359.99 和 359.99 度之间的角度。...水平或垂直翻转画布沿着相应的轴翻转图像。 更改画布大小 画布大小是图像的完全可编辑区域。“画布大小”命令可让您增大或减小图像的画布大小。增大画布的大小会在现有图像周围添加空间。...减小图像的画布大小会裁剪到图像中。如果增大带有透明背景的图像的画布大小,则添加的画布是透明的。如果图像没有透明背景,则添加的画布的颜色将由几个选项决定。 1.选取“图像”>“画布大小”。...如果图像包含背景图层,则“画布扩展颜色”菜单不可用。 5.单击“确定”。 通过增加画布的大小,制作画框 通过增加画布的大小并用颜色填充画布,您可以制作画框。

    2.5K20

    图形编辑器开发:网格与网格吸附

    网格通常渲染在图形的下方,并在画布缩放前后,维持线宽为 1 像素不变。 关于渲染实现,我之前写过 画布标尺的绘制的文章,思路其实是一样的。...有点类似刻度尺,没隔几个小的刻度,会绘制一个长一点的刻度。 即每 n x n 个小格子组成一个格子。 绘制上就是在原来网格线的基础上,再画一个放大了 n 倍的网格线。...因为密度的降低,此时可以考虑让点跟随画布缩放而缩放(还有一个前提是画布不能放得很大)。 网格密度过大 当缩小画布时,网格会跟随缩小。当缩放得非常小时,网格线就会显得非常密集。...if (gridSpacingInViewport < MIX_SPACING_IN_VIEWPORT) { gridVisible = false; } (2)调整网格间距为原来的整数倍,让密度动态变化...,突破阈值。

    19310
    领券