gpt4 book ai didi

Flutter - 如何在 custompainter 中缩放和绘制图像?

转载 作者:行者123 更新时间:2023-12-03 02:48:01 24 4
gpt4 key购买 nike

我正在尝试在 custompainter 上绘制图像。我正在使用 flutter custompainter video 上的示例这是我到目前为止所拥有的。我可以在图像中绘制,但无法缩放图像。如何在手势上缩放图像并在图像中绘制?我宁愿不使用任何包。

Container(
height: double.infinity,
width: double.infinity,
color: Colors.black87,
child: FittedBox(
child: GestureDetector(
onScaleStart: _scaleStartGesture,
onScaleUpdate: _scaleUpdateGesture,
onScaleEnd: (_) => _scaleEndGesture(),
child: SizedBox(
height: _image.height.toDouble(),
width: _image.width.toDouble(),
child: CustomPaint(
willChange: true,
painter: ImagePainter(
image: _image,
points: points
),
),
),
),
),
),

最佳答案

合并 LongPressDraggableDraggable和 GestureDetector 的 onScaleUpdate;

onScaleUpdate: (s) {

if (!(s.scale == 1 && s.rotation == 0)) {
controller
..setImageRotate(s.rotation)
..setImageScale(s.scale)
..setImageOffset(s.focalPoint);
setState(() {
message = controller.selectedController.toString();
});

}
},
Controller 类;
final StreamController<ImageController> _controllerStreamController =
StreamController<ImageController>.broadcast();
Stream<ImageController> get controllerTypeStream =>
_controllerStreamController.stream;

double rotateSync;
void setImageRotate(double rotate) {
if (selectedController == null) {
rotateSync = rotate;
_controllerStreamController.sink.add(this);
}
}

Offset offset;
void setImageOffset(Offset rotate) {
if (selectedController == null) {
offset = rotate;
_controllerStreamController.sink.add(this);
}
}
double scaleSync;
void setImageScale(double scale) {
if (selectedController == null) {
scaleSync = scale;
_controllerStreamController.sink.add(this);
}
}


然后在“堆栈”小部件中设置图像小部件;
堆栈 -> GestureDetector -> Draggable -> Transform.scale -> Transform.translate -> Tranform.rotate -> SizedBox(ImageWidget)

关于Flutter - 如何在 custompainter 中缩放和绘制图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64448426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com