问题描述
如何检测颤动中的阻力速度? 我想使用自定义绘画在颤动的屏幕上绘画,当速度较小时,笔触宽度应该较小,但是当拖动速度较高时,笔划宽度应该较大。
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
,该回调返回一个双精度值,指示指针自上次更新以来已移动了多少,它越大,速度越大。
根据您的情况,您可以根据行进距离更改笔划宽度。