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

我猜去全部机翻+个人修改补充+demo测试的形式,对expo进行一次大补血!欢迎加入expo兴趣学习交流群:597732981

【之前我写过一些列关于expo和rn入门配置的东i西,大家可以点击这里查看:从零学习rn开发

相关文章:

Expo大作战(一)--什么是expo,如何安装expo clinet和xde,xde如何使用

Expo大作战(二)--expo的生命周期,expo社区交流方式,expo学习必备资源,开发使用expo时关注的一些问题

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

Expo大作战(四)--快速用expo构建一个app,expo中的关键术语

Expo大作战(五)--expo中app.json 文件的配置信息

Expo大作战(六)--expo开发模式,expo中exp命令行工具,expo中如何查看日志log,expo中的调试方式

Expo大作战(七)--expo如何使用Genymotion模拟器

Expo大作战(八)--expo中的publish以及expo中的link,对link这块东西没有详细看,大家可以来和我交流

更多>>

写在二十三章以后的话,之前的翻译,不管如何,好与不好,终究是告一段落,也把expo基础理论的东西又深入的理解了一遍,后续expo大作战系列将主要介绍expo sdk的api。


GLView

Expo.GLView()
一个充当OpenGL ES渲染目标的视图。在安装时,会创建一个OpenGL ES上下文。其绘图缓冲区显示为每个框架的查看内容。

除布局和触摸处理的常规视图支持外,还有以下支持的道具:

onContextCreate创建OpenGL ES上下文时将调用的函数。该函数传递一个具有WebGLRenderingContext接口的参数gl。

msaaSamples GLView可以启用iOS的内置多重采样。此道具指定要使用的样本数。默认情况下这是4.将此设置为0会关闭多重采样。在Android上,这被忽略。

高级API(High-level APIs)

由于WebGL API相当低级,因此使用底层的GLView渲染更高级的图形API会很有帮助。以下库集成了常用的图形API:

任何期望WebGLRenderingContext的WebGL支持库都可以使用。有些时候,这样的库会假设一个Web JavaScript上下文(例如假设文档)。通常这是为了资源加载或事件处理,主渲染逻辑仍然只使用纯WebGL。所以这些库通常仍然可以使用两种解决方法。上述世expo特定的集成包括一些流行类库的解决方法。

WebGL API

一旦组件被挂载并创建了OpenGL ES上下文,通过onContextCreate prop接收到的gl对象就成为OpenGL ES上下文的接口,从而提供WebGL API。它类似于WebGL 1规范中的WebGLRenderingContext。还有一个gl.endFrameEXP()方法,通知上下文当前帧已准备好呈现。这与其他OpenGL平台中的“交换缓冲区”API调用类似。

以下WebGLRenderContext方法当前未实现:

  • getFramebufferAttachmentParameter()
  • getRenderbufferParameter()
  • compressedTexImage2D()
  • compressedTexSubImage2D()
  • getTexParameter()
  • getUniform()
  • getVertexAttrib()
  • getVertexAttribOffset()

texImage2D()的像素参数必须为null,带有像素数据的ArrayBuffer或形式为{localUri}的对象,其中localUri是设备文件系统中图像的file:// URI。因此一个Expo.Asset对象可以使用一次.downloadAsync()已经被调用(并完成)来获取资源。

出于效率原因,方法的当前实现不会对它们的参数执行类型或边界检查。所以,传递无效参数可能会导致本机崩溃。我们计划更新API以在即将推出的SDK版本中执行参数检查。目前错误检查的优先级很低,因为引擎通常不依赖于OpenGL API来执行参数检查,否则,通过底层OpenGL ES实现执行的检查通常就足够了。

GestureHandler

用于处理复杂手势的API。 从该项目的自述文件:

该库提供了一个API,可以提供移动平台特定的触摸和手势处理和识别的本机功能。 它允许定义在本地线程中100%运行的复杂手势处理和识别逻辑,因此具有确定性。

该API目前在DangerZone命名空间下可用,因为它基于快速改进的react-native-gesture-handler。 我们建议查看项目的GitHub存储库上的README文档和用法示例。 在Expo或ExpoKit中使用此API不需要本机设置(No native setup is required for using this API within Expo or ExpoKit)。

Font

允许从Web加载字体并在React Native组件中使用它们。 请参阅使用自定义字体指南中的更多详细使用信息

用法
Expo.Font.loadAsync(object)

Expo.Font.loadAsync()一次加载多个字体的便捷形式。

参数
map(object) - 一个名字的映射,需要在Expo.Font.loadAsync()中声明。

Expo.Font.loadAsync({
Montserrat: require('./assets/fonts/Montserrat.ttf'),
'Montserrat-SemiBold': require('./assets/fontsMontserrat-SemiBold.ttf'),
});

返回
不返回任何内容,只是等待所有字体可用。

指纹(Fingerprint)

使用TouchID(iOS)或指纹API(Android)通过指纹扫描对用户进行身份验证。

Expo.Fingerprint.hasHardwareAsync()
确定指纹扫描仪在设备上是否可用。

返回
指示指纹扫描仪在此设备上是否可用的布尔值。

Expo.Fingerprint.isEnrolledAsync()
确定设备是否保存了用于身份验证的指纹。

返回
一个布尔值,指示设备是否保存了用于身份验证的指纹。

Expo.Fingerprint.authenticateAsync()
尝试通过指纹进行身份验证。 Android - 在Android上使用指纹模块时,您需要提供UI组件来提示用户扫描指纹,因为操作系统没有默认警报。

参数
(仅适用于iOS)promptMessage(string)与TouchID提示符一起显示的消息。

返回
包含成功的对象,指示验证是否成功的布尔值以及在验证失败的情况下包含错误代码的错误。

Expo.Fingerprint.cancelAuthenticate() - (仅限Android)
取消指纹认证流程。

DeviceMotion

访问设备运动和方向传感器。所有的数据都是通过一个设备运行的三个轴来表示的。根据纵向:X从左到右,Y从下到上,Z从后到前垂直穿过屏幕。

Expo.DangerZone.DeviceMotion.addListener(listener)
订阅DeviceMotion更新。

参数
listener (function)  - 当DeviceMotion更新可用时调用的回调。当被调用时,监听器被提供一个参数,它是一个包含以下字段的对象:

  • acceleration (object) 加速度(对象) - 三轴上的设备加速度,作为具有x,y,z键的对象。用m / s2表示。
  • accelerationIncludingGravity (object)  - 设备加速时,三轴上的重力作为具有x,y,z键的对象。用m / s2表示。
  • rotation (object)  - 设备在空间中的方向,作为具有alpha,beta,gamma键的对象,其中alpha用于围绕Z轴旋转,beta用于X轴旋转,gamma用于Y轴旋转。
  • rotationRate(object) - 设备围绕其每个轴的旋转速率,作为具有alpha,beta,gamma键的对象,其中alpha围绕Z轴,beta围绕X轴,gamma围绕Y轴。
  • orientation (number) - 基于屏幕旋转的设备方向。值为0(人像),90(右侧风景),180(上下颠倒),-90(左侧风景)。

返回
一个EventSubscription对象,当您想要取消订阅侦听器时,您可以调用remove()。

Expo.DangerZone.DeviceMotion.removeAllListeners()
删除所有听众。

Expo.DangerZone.DeviceMotion.setUpdateInterval(intervalMs)
订阅DeviceMotion更新。

参数

intervalMs(number)DeviceMotion更新之间的期望时间间隔(以毫秒为单位)

亮度(Brightness)

获取和设置屏幕亮度的API。

Expo.Brightness.setBrightnessAsync(brightnessValue)

设置屏幕亮度。

参数
brightnessValue(number) - 介于0和1之间的数字,表示所需的屏幕亮度。

Expo.Brightness.getBrightnessAsync()

获取屏幕亮度。

返回
用0和1之间的数字解析的Promise,代表当前的屏幕亮度。

Expo.Brightness.setSystemBrightnessAsync(brightnessValue)
警告:此方法是实验性的。

设置全局系统屏幕亮度,需要Android上的WRITE_SETTINGS权限。

参数
brightnessValue(number) - 介于0和1之间的数字,表示所需的屏幕亮度。

await Permissions.askAsync(Permissions.SYSTEM_BRIGHTNESS);

const { status } = await Permissions.getAsync(Permissions.SYSTEM_BRIGHTNESS);
if (status === 'granted') {
Expo.Brightness.setSystemBrightnessAsync();
}
...

Expo.Brightness.getSystemBrightnessAsync()
警告:此方法是实验性的。

获取全局系统屏幕亮度。

返回
用0和1之间的数字解析的Promise,表示当前系统屏幕亮度。


下一张继续介绍,这一篇主要介绍了:expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness欢迎大家关注我的微信公众号,这篇文章是否被大家认可,我的衡量标准就是公众号粉丝增长人数。欢迎大家转载,但必须保留本人博客链接!

 

Expo大作战(三十七)--expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness的更多相关文章

  1. Expo大作战(三十三)--expo sdk api之MapView(地图),MailComposer(磁力传感计),Lottie(动画)

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

  2. Expo大作战(三十一)--expo sdk api之Payments(expo中的支付),翻译这篇文章傻逼了,完全不符合国内用户,我只负责翻译大家可以略过!

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

  3. Expo大作战(三十)--expo sdk api之Permissions(权限管理模块),Pedometer(计步器api)

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

  4. Expo大作战(二十七)--expo sdk api之Util(expo自带工具类),tackSnapshotAsync,Svg,SQLite

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

  5. Expo大作战(三十九)--expo sdk api之 DocumentPicker,Contacts(获取手机联系人信息),Branch

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

  6. Expo大作战(三十八)--expo sdk api之 FileSystem(文件操作系统)

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

  7. Expo大作战(三十六)--expo sdk api之 ImagePicker,ImageManipulator,Camera

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

  8. Expo大作战(三十五)--expo sdk api之Location!

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

  9. Expo大作战(三十四)--expo sdk api之LinearGradient(线性渐变),KeepAwake(保持屏幕不休眠),IntentLauncherAndroid,Gyroscope,

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

随机推荐

  1. Source Insight函数调用关系显示设置

    当我们需要设置source Insight的项目代码中函数调用关系时,可通过如下的设置来实现: 1.显示函数调用关系窗口 Source Insight工具栏中“View”—>“Relation  ...

  2. 嵌入式小系统I2S接口调试总结

    最近调试了I2S.由于芯片里面硬件配置出现了几个错误,着实也把我折腾了一番,不过,最终 还是把它搞定了.为了加深理解,就做个笔记吧,方面以后查找和学习. 定义:I²S或I2S(英语:Inter-IC ...

  3. Maven 如何发布 jar 包到 Nexus 私库

    Nexus2可以通过管理界面来上传jar包到私库中,而最新的Nexus3却找不到了上传界面,只能通过以下方式来发布到私库. 发布第三方jar包 这种情况是maven远程仓库没有,本地有的第三方jar包 ...

  4. Liferay7 BPM门户开发之19: 理解Service Builder体系

    Service Builder是Liferay为业务开发而设计的模型驱动(model-driven)平台工具,提供一系列的实体类.数据持久化.服务相关的代码自动生成服务.支持Hibernate and ...

  5. SQL求出优秀、及格人数

    首先看看班级的表的数据: 接下来,由于班级有分linux .Mysql.Java三门科目,因此,先求Linux科目的及格人数.不及格人数和优秀人数 做一个语句的分解: 1.首先查出每个班级的班级ID ...

  6. package.json文件中dependencies和devDependencies的区别

    在工作和学习中,我经常会用的npm 下载各种包,有时就会遇到各种npm 的形式,现在就捋一捋 首先要先了解   package.json文件中dependencies和devDependencies的 ...

  7. Python:标准库(包含下载地址及书本目录)

    下载地址 英文版(文字版) 官方文档 The Python Standard Library <Python标准库>一书的目录 <python标准库> 译者序 序 前言 第1章 ...

  8. 全网最详细的IDEA里如何正确新建普通的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(类似eclipse里同一个workspace下【一个子项目】并存)(图文详解)

    不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 如果是在Myeclipse里,则是File -> new -> ...

  9. 从零开始学 Web 之 ES6(五)ES6基础语法三

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  10. PHP-CPP开发扩展(五)

    PHP-CPP是一个用于开发PHP扩展的C++库.本节讲解如何在C++中实现PHP类. 类和对象 类和对象 怎样在PHP-CPP里写出PHP的类呢?很简单,看下面的例子: main.cpp /** * ...