首页 > 解决方案 > 如何检测颤振中的阻力速度?

问题描述

如何检测颤振中的阻力速度?我想使用自定义绘画在屏幕上绘制,当速度较小时,笔画宽度应该更小,但是当拖动速度很高时,笔画宽度应该更大。

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;
}

标签: flutterdartflutter-layout

解决方案


速度是在给定时间内位置变化的程度。

为此,您details.delta.distanceonPanUpdate回调中有一个,它返回一个双精度值,指示自上次更新以来指针移动了多少,它越大,速度越大。

在您的情况下,您可以根据行进的距离更改笔划宽度。


推荐阅读