react-native-vision-camera RN相机 初使用小记

陆洛城
2023-12-01

该插件是react-native-camera变种, react-native-camera作者已经弃用,重新上架的新的插件,网上基本上没有使用的帖子本人边github关键词搜索边参考官方文档===》指路react-native-vision-camera官方文档

大致调整出一个可以录像/拍照的demo 供大家参考~ 

适用于:扫码场景,相机作为铺底(我所运用的场景)

代码如下:

import React, { forwardRef, useRef, useImperativeHandle } from "react";
import { View, Text, Image } from "react-native";
import { Camera, useCameraDevices } from "react-native-vision-camera";

const CameraScreen = forwardRef((props, ref) => {
  useImperativeHandle(ref, () => ({
    //暴露可供父组件调用函数的hooks
    takePhoto,
    takeVideoStart,
    takeVideoStop,
  }));
  const camera = useRef(null);
  const devices = useCameraDevices();
  const device = devices.back; //默认后置摄像头
  if (device == null) return <Text>loading...</Text>;
  const zoom = device.neutralZoom; //获取 正常相机的变焦
  //开始拍照
  const takePhoto = async () => {
    return await camera.current.takePhoto(); //相机照片
  };
  //开始录像
  const takeVideoStart = () => {
    camera.current.startRecording({
      flash: "off",
      onRecordingFinished: (video) => console.log(video),
      onRecordingError: (error) => console.error(error),
    });
  };
  //停止录像
  const takeVideoStop = async () => {
    return await camera.current.stopRecording(); // 录像视频路径, 暂时的资源,app关闭会销毁
  };
  return (
    <View style={{ flex: 1 }}>
      <Camera
        ref={camera} // 用于获取拍照录像函数
        style={{ flex: 1 }}
        zoom={zoom} //镜头广角大小,获取正常大小
        device={device} //此相机设备包含的物理设备类型列表。
        video={true} //录像功能打开关闭
        supportsVideoHDR={true}
        isActive={props.isopenCamera} //是否打开相机, 可以缓存相机,加快打开速度
        photo={true} //拍照功能是否打开
      />
      {/*Image用require不行,require是编译时执行 只能引用字符串,不可以用变量 */}
      {/* <Image source={{ uri: url }}></Image> */}
    </View>
  );
});

export default CameraScreen;

 类似资料: