flutter - 如何检测颤振中的阻力速度?
问题描述
如何检测颤振中的阻力速度?我想使用自定义绘画在屏幕上绘制,当速度较小时,笔画宽度应该更小,但是当拖动速度很高时,笔画宽度应该更大。
GestureDetector(
onPanUpdate: (DragUpdateDetails details) {
setState(
() {
RenderBox object = context.findRenderObject();
Offset _localPosition =
object.globalToLocal(details.globalPosition);
_points = List.from(_points)..add(_localPosition);
},
);
},
onPanEnd: (DragEndDetails details) => {
_deletedPoints.clear(),
_points.add(null),
// _listPoints.add(_points),
// _listPoints = List.from(_listPoints)..add(_points),
},
child: CustomPaint(
painter: Draw(points: _points),
size: Size.infinite,
),
),
扩展 customPainter 的自定义绘制小部件
class Draw extends CustomPainter {
List<Offset> points;
// List<List<Offset>> points;
Draw({this.points});
@override
void paint(Canvas canvas, Size size) {
Paint paint = Paint()
..color = brushColor
..strokeCap = StrokeCap.round
..strokeWidth = brushWidth;
for (int i = 0; i < points.length - 1; i++) {
if (points[i] != null && points[i + 1] != null) {
canvas.drawLine(points[i], points[i + 1], paint);
}
}
}
@override
bool shouldRepaint(Draw oldDelegate) => oldDelegate.points != points;
}
解决方案
速度是在给定时间内位置变化的程度。
为此,您details.delta.distance
在onPanUpdate
回调中有一个,它返回一个双精度值,指示自上次更新以来指针移动了多少,它越大,速度越大。
在您的情况下,您可以根据行进的距离更改笔划宽度。
推荐阅读
- jsf - 参数未在 Bean 中更新
- spring-batch - 如何从 CustomItemWriter 以编程方式访问当前块上下文?
- javascript - 如何在下一个表格单元格中使用 Tab 键设置焦点输入
- azure - 请求限制:Azure 应用程序配置
- java - 如何在 JavaFx 中从 ImageViews 数组添加到 GridPane
- selenium - 使用 Selenium Webdriver 启动后,Google chrome 会自动关闭
- css - 火狐开发工具问题
- scala - 如何使用 Scala sbt 查找并安装它们?
- elasticsearch - elasticsearch查询中的(来自/大小)不返回预期的文档
- jqgrid - 单元格未与标题对齐 - JQGrid