如何检测颤振中的阻力速度?

问题描述

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

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

解决方法

我本人还没有使用过这些,但是您可以研究一下 DragUpdateDetails。 details中的onPanUpdate有一个名为delta的偏移对象。哪个是每次调用onPanUpdate时都会更新的坐标。

https://api.flutter.dev/flutter/gestures/DragUpdateDetails-class.html

还有一个名为VelocityTracker

的类

https://api.flutter.dev/flutter/gestures/VelocityTracker-class.html

希望这对您有所帮助

,

速度是给定时间内位置变化了多少。

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

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