React Native (Android) 中的屏幕截图

Posted

技术标签:

【中文标题】React Native (Android) 中的屏幕截图【英文标题】:Screen Shot in React Native (Android) 【发布时间】:2018-06-19 09:23:48 【问题描述】:

我正在使用React-Native-View-Shot Library截取整个屏幕。

文档中提到方法 captureScreen():

captureScreen() 将捕获当前显示屏幕的内容作为本机硬件屏幕截图。它不需要 ref 输入,因为它在视图级别不起作用。这意味着 ScrollView 不会被完整捕获 - 只会捕获用户当前可见的部分。

但是,屏幕截图没有捕获除相机预览之外的任何组件。文档的互操作性表中声称支持所有使用的组件。

代码:

takeScreenshot() 
    captureScreen(
        format: "jpg",
        quality: 0.8
    ).then(
        uri =>  savePath = uri; console.log("Image saved to", uri); CameraRoll.saveToCameraRoll(uri); Toastandroid.show(uri + "", ToastAndroid.SHORT); ,
        error => console.error("Oops, snapshot failed", error)
        );


render() 
    return (
        <View style=styles.container>
            <Text style=backgroundColor:"white">Hello World</Text>
            <RNCamera style=styles.preview
                ref=ref => 
                    this.camera = ref;
                
                type=RNCamera.Constants.Type.back
                flashMode=RNCamera.Constants.FlashMode.on
                permissionDialogTitle='Permission to use camera'
                permissionDialogMessage='We need your permission to use your camera phone'>
            </RNCamera>
            <Button title="Capture" onPress=()=>this.takeScreenshot()/>
        </View>
    )

RNCamera 是来自react-native-camera 的摄像头组件

Expected Result

Obtained Result

Referred Question也没有答案

可能是什么问题?为什么组件也被相机预览覆盖了?

【问题讨论】:

【参考方案1】:
import ViewShot from "react-native-view-shot";

<ViewShot ref="viewShot" options= format: "jpg", quality: 0.9 
     >
<View style=styles.container ref='snapViewPic'>
     <RNCamera style=styles.preview
            ref=ref => 
                this.camera = ref;
            
            type=RNCamera.Constants.Type.back
            flashMode=RNCamera.Constants.FlashMode.on
            permissionDialogTitle='Permission to use camera'
            permissionDialogMessage='We need your permission to 
             use your camera phone'>
        </RNCamera>
 </View>
</ViewShot>

takeScreenShot () 
    this.refs.viewShot.capture().then(uri => 
     console.log("do something with ", uri);
    );

确保您的“捕获按钮”和“hello world”不得出现在“容器”视图中。

这对我有用。

【讨论】:

以上是关于React Native (Android) 中的屏幕截图的主要内容,如果未能解决你的问题,请参考以下文章

android中的React-native POST请求通过https返回网络错误

Android模拟器中的React-Native Runnable错误

React Native Android 中的合并清单问题

Android Studio 中的 React Native 项目错误

Android react-native 中的 MainActivity 不存在错误

react native android中的firebase apikey丢失或无效