You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter Camera插件中实现点击对焦功能

Flutter camera插件点击对焦实现思路

基础实现步骤

  • 首先确认你使用的是官方camera插件0.10.0及以上版本,该版本开始原生支持对焦点设置能力
  • 用GestureDetector组件包裹CameraPreview,在onTapUp回调中获取触摸点的相对坐标,示例代码如下:
GestureDetector(
  onTapUp: (details) async {
    // 1. 获取预览组件的尺寸
    final previewSize = controller.value.previewSize!;
    // 2. 把全局触摸坐标转换为相对于预览组件的局部坐标
    final localPosition = details.localPosition;
    // 3. 坐标归一化,转换为0~1范围的比例值
    final x = localPosition.dx / previewSize.width;
    final y = localPosition.dy / previewSize.height;
    // 4. 适配部分平台坐标翻转问题,可根据实际测试情况调整
    final adjustedPoint = Platform.isIOS ? Offset(1 - x, 1 - y) : Offset(x, y);
    
    // 5. 先判断设备是否支持设置对焦点
    if (controller.value.isFocusPointSupported) {
      // 设置对焦点
      await controller.setFocusPoint(adjustedPoint);
      // 可选:同步设置曝光点,提升对焦区域的曝光效果
      if (controller.value.isExposurePointSupported) {
        await controller.setExposurePoint(adjustedPoint);
      }
      // 触发自动对焦
      await controller.setFocusMode(FocusMode.auto);
    }
  },
  child: CameraPreview(controller),
)

常见问题适配

  • 如果你的应用支持屏幕旋转,需要在坐标转换前先获取当前的设备方向,对坐标做对应的旋转适配,避免对焦位置和点击位置不一致
  • 如果你对预览做了裁剪、缩放适配(比如全屏显示预览),需要先把点击坐标转换为原始预览尺寸对应的坐标,再做归一化处理
  • 部分设备不支持对焦点设置,调用相关接口前必须做能力判断,否则会抛出异常

内容的提问来源于stack exchange,提问作者Ryan Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:18:01