Flutter使用GestureDetector工具实现手势缩放效果

GestureDetector是Flutter内部处理用户手势操作的一个小工具。

如果想要实现缩放效果需要利用到其中两个方法

onScaleStart :当用户触碰屏幕并开始缩放的时候

onScaleUpdate:当用户正在执行缩放时候

ScaleUpdateDetails 是作为函数参数进行传递的,它有以下属性

1、scale 表示上一帧的缩放比例

2、focalPoint 缩放手势中心点坐标

3、pointerCount 当前触控点数量(小于一个点说明没有用手势缩放)

这里主要用到scale这个参数。

示例:

Dart 复制代码
class ScalePage extends StatefulWidget {
  const ScalePage({super.key});

  @override
  State<StatefulWidget> createState() {
    return GestureDetectorPageTest();
  }
}

class GestureDetectorPageTest extends State<ScalePage> {
  double _scale = 1.0;
  double _startScale = 1.0;
  bool ifScale = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("手势处理工具GestureDetector"),
      ),
      body: Container(
        color: Colors.amber,
        width: MediaQuery.of(context).size.width,
        height: MediaQuery.of(context).size.height,
        child: GestureDetector(
          child: Transform.scale(
            scale: _scale,
            child: const Image(image: AssetImage('images/a.png')),
          ),
          onScaleStart: (e) {
            _startScale = _scale;
          },
          onScaleUpdate: (e) {
            setState(() {
              _scale = _startScale * e.scale;
                //clamp 表示缩放最大不超过原图的两倍,最小不小于原图的0.5倍
              _scale = _scale.clamp(0.5, 2.0);
            });
          },
          onScaleEnd: (e) {

          },
          onDoubleTap: () {
            setState(() {
              if (ifScale) {
                _scale = _startScale * 2;
              } else {
                _scale = _startScale / 2;
              }
              _scale = _scale.clamp(0.5, 2.0);
              ifScale = !ifScale;
            });
          },
        ),
      ),
    );
  }
}
相关推荐
ujainu19 小时前
Flutter与DevEco Studio结合开发简单项目实战指南
flutter·开发·deveco studio
嗝o゚20 小时前
Flutter 无障碍功能开发最佳实践
python·flutter·华为
嗝o゚20 小时前
Flutter与ArkTS混合开发框架的探索
flutter
小a杰.21 小时前
Flutter国际化(i18n)实现详解
flutter
嗝o゚21 小时前
开源鸿蒙 Flutter 应用包瘦身实战
flutter·华为·开源·harmonyos
小a杰.21 小时前
Flutter 响应式设计基础
flutter
狮恒1 天前
OpenHarmony Flutter 分布式设备发现与连接:无感组网与设备协同管理方案
分布式·flutter·wpf·openharmony
嗝o゚1 天前
Flutter与开源鸿蒙:一场“应用定义权”的静默战争,与开发者的“范式跃迁”机会
python·flutter
狮恒1 天前
OpenHarmony Flutter 分布式音视频:跨设备流传输与实时协同交互方案
分布式·flutter·wpf·openharmony
duangww1 天前
Flutter和SAPUI5集成
flutter