React-Native之截图组件view-shot的介绍与使用

一,需求分析

1,需要将分享页生成图片,并分享到微信好友与朋友圈。

二,react-native-view-shot介绍

1,可以截取当前屏幕或者按照当前页面的组件来选择截取,如当前页面有一个图片组件,一个View组件,可以选择截取图片组件或者View组件。支持iOS和安卓。

2,如需要截取ScrollView,只需要将”full”传递给snapshot方法即可。 captureRef方法和captureScreen方法都可以设置options,options的说明如下:

  • width / height:可以指定最后生成图片的宽度和高度。
  • format:指定生成图片的格式png or jpg or webm (Android). 默认是png。
  • quality:图片的质量0.0 - 1.0 (default)。
  • result:最后生成的类型,可以是tmpfile、base64、data-uri。
  • snapshotContentContainer:如果设置为True的话,会动态计算组件的高度。如果是ScrollView组件,就会截取整个ScrollView的实际高度。

3,一些方法

  • children:点阵化的实际内容。
  • options:与captureRef方法中的选项相同。
  • captureMode(string):
  • 如果没有定义(默认)。捕获不是自动的,您需要自己使用ref和调用capture()。
  • "mount":在挂载时捕获视图一次。(理解图像加载不会等待是很重要的,在这种情况下,您希望在图像#onLoad之后的viewShotRef.capture()中使用“none”)。
  • "continuous":这将捕获大量的图像连续。非常具体的用例。
  • "update":这将捕获图像每次反应重绘(上做更新)。非常具体的用例。
  • onCapture:在定义captureMode函数时,将使用捕获结果调用这个回调函数。
  • onCaptureFailure:当定义了captureMode函数时,当捕获失败时将调用这个回调函数。

组件地址:react-native-view-shot

三,react-native-view-shot使用

3.1 安装方法

    npm install react-native-view-shot

   自动配置:react-native link react-native-view-shot

   手动配置:       
1,android配置

(1),在android/settings.gradle文件中添加如下代码:

 include ':react-native-view-shot'
project(':react-native-view-shot').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-view-shot/android')

(2),在android/app/build.gradle文件中的dependencies标签中添加模块依赖:

  ...

  dependencies {

     ...

        implementation project(':react-native-view-shot')    // Add this line only.

  }

(3),在MainActivity.java文件中添加如下代码:

 import fr.greweb.reactnativeviewshot.RNViewShotPackage;; // Add this line before public class MainActivity

     ...

  @Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new RNViewShotPackage(), // Add this line
);
}

     2,ios配置

(1),在Xcode中Libraries目录下添加RNViewShot.xcodeproj(项目文件名/node_modules/react-native-view-shot/ios/)

(2),将Libraries中RNViewShot.xcodeproj下的products目录下的libRNViewShot.a文件拖到General--Linked FrameworksLibraries下

(3),在Xcode中项目目录下Build Settings--Header Search Paths 添加:$(SRCROOT)/../node_modules/react-native-view-shot/ios

3.2 使用实例

引入

 import ViewShot, { captureScreen, captureRef } from "react-native-view-shot";

1,captureScreen() 截屏方法:截取当前屏幕,跟系统自带的截图一致,只会截取当前屏幕显示的页面内容。如果是ScrollView,那么未显示的部分是不会被截取的。

  captureScreen({
format: "jpg",
quality: 0.8
}).then(
uri => {
let Imageuri = (uri.toLowerCase()).includes('file://')?uri:'file://'+uri//判断是否有file://,没有则添加
self.setState({ Imageuri: Imageuri })
},
error => console.log("Oops, snapshot failed==" + error)
);

2,captureRef(view, options) 根据组件reference名称来截取,如需要截取ScrollView,只需要将”full”传递给snapshot方法即可。

 render() {
return (
<ScrollView ref="full">
<View ref="form1”>
</View>
<View ref="form2”>
</View>
</ScrollView>
);
} snapshot = refname => () =>
captureRef(refname, {
format: "jpg",
quality: 0.8,
result: "tmpfile",
snapshotContentContainer: true
})
.then(
uri => console.log("Image saved to", uri),
error => console.error("Oops, snapshot failed", error)
);

React-Native之截图组件view-shot的介绍与使用的更多相关文章

  1. react native之组织组件

    这些组件包括<TabView>,<NavigatorView>和<ListView>,他们实现了手机端最常用的交互和导航.你会发现这些组件在实际的项目中会非常有用. ...

  2. React Native之倒计时组件的实现(ios android)

    React Native之倒计时组件的实现(ios android) 一,需求分析 1,app需实现类似于淘宝的活动倒计时,并在倒计时结束时,活动也结束. 2,实现订单倒计时,并在倒计时结束时,订单关 ...

  3. Expo大作战(三)--针对已经开发过react native项目开发人员有针对性的介绍了expo,expo的局限性,开发时项目选型注意点等

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  4. React Native之常用组件(View)

    一. JSX和组件的概念 React的核心机制之一就是虚拟DOM:可以在内存中创建的虚拟DOM元素.React利用虚拟DOM来减少对实际DOM的操作从而提升性能.传统的创建方式是: 但这样的代码可读性 ...

  5. React Native知识6-NavigatorIOS组件

    NavigatorIOS包装了UIKit的导航功能,可以使用左划功能来返回到上一界面.本组件并非由Facebook官方开发组维护.这一组件的开发完全由社区主导.如果纯js的方案能够满足你的需求的话,那 ...

  6. React Native知识2-Text组件

    Text用于显示文本的React组件,并且它也支持嵌套.样式,以及触摸处理.在下面的例子里,嵌套的标题和正文文字会继承来自styles.baseText的fontFamily字体样式,不过标题上还附加 ...

  7. react native 之子组件和父组件之间的通信

    react native开发中,为了封装性经常需要自定义组件,这样就会出现父组件和子组件,那么怎么在父组件和子组件之间相互通信呢,也就是怎么在各自界面push和pop.传值. 父组件传递给子组件: 父 ...

  8. React Native学习(二)之View

    React Native组件解析(二)之View 0.JSX React的核心机制之一就是虚拟DOM:可以在内存中创建的虚拟DOM元素.React利用虚拟DOM来减少对实际DOM的操作从而提升性能. ...

  9. React Native中Touchable组件的使用

    截图如下: /** * Sample React Native App * https://github.com/facebook/react-native * @flow */ import Rea ...

  10. 从零学React Native之08Image组件

    开发过程中, 几乎每个项目都会用到图片. RN就是通过Image组件显示图片.既可以加载网络图片,也可以加载本地资源图片. Image组件必须在样式中声明图片的款和高.如果没有声明,则图片将不会被呈现 ...

随机推荐

  1. mysql统计一年12月的数据

    效果图: select end) as 一月份, end) as 二月份, end) as 三月份, end) as 四月份, end) as 五月份, end) as 六月份, end) as 七月 ...

  2. python 基本运算符

    一.格式化输出 简易名片的制作 name="小龙女" phone=15464623646 firm="神雕侠侣" pro="神仙姐姐" pr ...

  3. Teradata数据库访问链条

  4. HDFS的dfs.replication不同验证

    对于上传文件到hdfs上时,当时hadoop的副本系数是几,这个文件的块数副本数就会有几份,无论以后你怎么更改系统副本系统,这个文件的副本数都不会改变,也就说上传到分布式系统上的文件副本数由当时的系统 ...

  5. Nginx使用教程(二):Nginx配置性能优化之worker配置

    配置Nginx workers <br\>NGINX根据指定的配置运行固定数量的工作进程. 这些工作进程负责处理所有处理. 在下面的章节中,我们将调整NGINX worker参数. 这些参 ...

  6. hTML 如何在不同页面上传递参数( 1 )

    (1).一种是重定向跳转,超连<a>就是一种重定向跳转,这样的跳转request对象是传不到下一个页面的,下一个页面得到的request对象是一个新的对象,而不是上一个页面传过来的就得不到 ...

  7. 【FJWC 2019】min

    [FJWC 2019]min 题目描述 给你一张 \(n\) 个点 \(m\) 条边的无向图,走过每条边都需要花费 \(1\) 秒. 给你一个整数 \(k\) ,请你选择至多 \(k\) 个点,令经过 ...

  8. 设计模式のAbstractFactory(虚拟工厂)----创建模式

    一.产生背景 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最 ...

  9. linux 基本操作

     终端常用快捷键 ctrl+c 中断运行ctrl+d 退出中断ctrl+s 暂停当前程序,暂停后按下任意键恢复运行 ctrl+k 删除从光标所在位置到行末 Alt+Backspace 向前删除一个单词 ...

  10. json_encode里面经常用到的 JSON_UNESCAPED_UNICODE和JSON_UNESCAPED_SLASHES

    php格式化json的函数json_encode($value,$options) 其中有2个比较常用到的参数 JSON_UNESCAPED_UNICODE(中文不转为unicode ,对应的数字 2 ...