【问题标题】:How to move around your widgets (Image) after zooming (Flutter)?缩放 (Flutter) 后如何在小部件 (Image) 中移动?
【发布时间】:2020-06-26 16:16:35
【问题描述】:

我想在颤动中放大图像,我可以使用GestureDetectorTransForm 来做到这一点,但我无法在图像周围移动。它只是缩放。我想实现一些拖动,以便在缩放后我可以移动我的图像。
我该怎么做?
附:我尝试在GestureDetector 中使用onPanStart ...,但我不能同时使用onScaleStartonPanStart

这是我的代码:

class _ImageViewState extends State<ImageView> {

  File img;
  double _scale = 1.0;
  double _prev = 1.0;
  _ImageViewState(this.img);
  @override
  Widget build(BuildContext context) {
    return SafeArea(
          child: GestureDetector(
            
            onScaleStart: (ScaleStartDetails details){

              setState(() {
                _scale = _prev;
              });
            },
            onScaleUpdate: (ScaleUpdateDetails details){
              setState(() {
                _scale = _prev * details.scale;
              });
              print(_scale);
            },
            onScaleEnd: (ScaleEndDetails details){
              
              setState(() {
                _prev = _scale;
              });
            },
            child : Transform(
              alignment : FractionalOffset.center,
              transform: Matrix4.diagonal3(Vector3(_scale , _scale , _scale)),
              child: Image.file(img),
            )

          ),
        );
  }
}

【问题讨论】:

    标签: android flutter flutter-layout


    【解决方案1】:

    我试图在我的项目中实现类似的东西。我正在使用matrix_gesture_detector 包并创建了以下自定义小部件:

    import 'package:flutter/material.dart';
    import 'package:matrix_gesture_detector/matrix_gesture_detector.dart';
    
    class ZoomableWidget extends StatefulWidget {
      final Widget child;
    
      const ZoomableWidget({Key key, this.child}) : super(key: key);
      @override
      _ZoomableWidgetState createState() => _ZoomableWidgetState();
    }
    
    class _ZoomableWidgetState extends State<ZoomableWidget> {
      Matrix4 matrix = Matrix4.identity();
      Matrix4 zerada =  Matrix4.identity();
    
      @override
      Widget build(BuildContext context) {
        return GestureDetector(
          onDoubleTap: (){
            setState(() {
              matrix = zerada;
            });
          },
          child: MatrixGestureDetector(
            shouldRotate: false,
            onMatrixUpdate: (Matrix4 m, Matrix4 tm, Matrix4 sm, Matrix4 rm) {
              setState(() {
                matrix = m;
              });
            },
            child: Transform(
              transform: matrix,
              child: widget.child,
            ),
          ),
        );
      }
    }
    

    【讨论】:

    • 但我无法正常放大它。它还在任何方向旋转图像?有办法处理吗?
    • 你确定吗?因为shouldRotateMatrixGestureDetector 中设置为false
    • 是的,我昨天试过了,它正在旋转,但我对控制这个有了一些想法。谢谢。
    • 你可以试试我的那个。它对我来说很好。它也没有旋转。
    • 好的,没问题,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-10-18
    • 2020-07-03
    • 2022-12-09
    • 2020-06-20
    • 2015-04-28
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    相关资源
    最近更新 更多