问题标签 [flutter-canvas]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
flutter - Flutter 中的高效 Canvas 渲染
我一直在尝试开发一个绘图应用程序,所有示例代码,包括来自 The Boring Flutter Development Show 的示例代码都不能很好地转化为实际使用。
主要问题是它CustomPaint
的绘制操作太昂贵并且重新绘制每一点、每一帧。随着点数的增加,颤振应用每帧的渲染时间显着增加
从我花时间寻找解决这个问题的方法开始,我发现了这些
RepaintBoundary
: 栅格化图层Custom Widget using
SingleChildRenderObjectWidget
andRenderProxyBox
: 必须实现一个paint方法并且不能传递一个控制器
我认为上述任何解决方案都不能很好地满足我的需求:无需重新绘制即可顺利进行画布绘制操作。我什至尝试简化这些要点,但由于固有的机制,这也不起作用CustomPaint
如果有办法将画布作为小部件传递并附加控制器,则可以轻松存储捕获的点并使用基本的画布操作,例如canvas.drawPath()
或canvas.drawLine()
非常有效
任何建议都会有所帮助。谢谢!
flutter - Flutter中平铺图像的偏移原点
我正在尝试在 Flutter 应用程序中创建视差背景,构建它的最有效方法是使用Stack
填充屏幕的图像作为背景,然后将我的列表放在顶部。图像ImageRepeat
在 Y 轴上用一组平铺。然后计划是偏移磁贴的原点与ScrollController
我用于我的列表的同步。然后我可以调整平铺图像的原点以创建视差效果。这应该很简单。这是上下文的一些代码:
我的问题是 Image 没有offset
属性或origin
位置。我需要一些关于最简单方法的建议。我已经看到有自定义画家、画布方法等,但是当小部件中应该有更优雅的解决方案时,它们似乎都过于复杂Image
,或者可能在另一个小部件中可以给我相同的视差效果。
flutter - 可以直接用 Flutter 内置的 Canvas 绘制方法来渲染变宽笔画吗?
Flutter 内置的 Canvas 绘图方法是否可以直接用于渲染可变宽度的笔画,例如反映手写应用程序中每个笔画施加的压力?
理想情况下,以与 SVG 的 XML-esque 格式保存兼容的方式(底部示例)。
我认为我注意到的/遇到的麻烦/当前的尝试:
canvas.drawPath
, canvas.drawPoints
,canvas.drawPolygon
等canvas.drawLines
都只采用一个 Paint 对象,而该对象又可以有一个strokeWidth
(与采用 Paint 对象或strokeWidth
s 的列表相反,这样除了位置之外的路径参数可以点对点更改并在其间插值)。
strokeWidth
通过迭代位置和压力数据列表并使用相应的 Canvas 方法来绘制具有不同 s 或半径的线、多边形或点,从而导致没有插值/路径看起来不是连续描边。
OneNote 的屏幕截图显示了我想要的行为:
(未优化)最小的工作示例:
我将尝试编写自己的实现,以从 PointerEvents 渲染美观的 SVG 友好数据,但是现有的许多类都感觉 SVG/漂亮矢量兼容(例如,所有 lineTos、moveTos、笔画类型和结尾以及其他参数) 我认为值得检查是否有我遗漏的东西,而这些方法已经可以做到这一点?
Xournal++ 保存的 SVG 文件中的几行示例,每个线段的笔画宽度参数都在变化,所有其他列出的参数可能也有可能发生变化。每行包含一个 moveTo 命令(M)和一个 lineTo 命令(L),后者从当前位置(最后一个 moveTo-ed 或 lineTo-ed)绘制一条线,让人想起 Flutter 的分段/子路径和当前点, 到指定的偏移量:
该方法似乎是“画一条很短的线,改变笔画宽度,从前一个位置开始画下一条很短的线”,我试图用上面的绘画方法来模拟。
flutter - Flutter - 在 CustomPainter 中重用以前绘制的画布
我有一个 CustomPainter,我想每隔几毫秒渲染一些项目。但我只想渲染自上次绘制以来已更改的项目。我计划手动清除将要更改的区域并仅在该区域内重新绘制。问题是每次调用paint() 时,Flutter 中的画布似乎都是全新的。我知道我可以跟踪整个状态并每次都重绘所有内容,但出于性能原因和特定用例的考虑,这是不可取的。以下是可能代表该问题的示例代码:
我知道当画布大小发生变化时,一切都需要重新绘制。
flutter - 颤振容器消失
不知道我在这里缺少什么。想让 Container UI 像 Material Filled Text Field 一样。只是想知道我们是否可以一起使用 BorderSide 和 borderRadius 或者它们分开工作。并且只使用容器我怎么能做到这一点?
flutter - 围绕其中心旋转绘制的文本
我正在尝试围绕画布的中心旋转绘制在画布上的文本。相反,在下面的代码中,当我按下浮动按钮时,文本围绕文本的左上角旋转。
按下按钮会增加角度,该角度被传递CanvasPainter
给以绘制文本。
矩形的左上角最初应位于offset
。