React Native开发鸿蒙Next---灰度模式
React Native开发鸿蒙Next---灰度模式
政企相关的App在开发过程中,往往需要制作一个灰度模式,用于应对注入国家公祭日等特殊日期情况。Harmony开发中,由于基于ArkTs,处理相对比较简单---仅需要在入口文件的build方法中对最外层的组件添加grayscale属性即可。
/**
* Adds a grayscale effect to the current component.
* The value is the gray scale conversion ratio. If the input parameter is 1.0, the gray scale image is completely converted to the gray scale image. If the input parameter is 0.0, the image does not change.
* If the input parameter is between 0.0 and 1.0, the effect changes. (Percentage)
*
* @param { number } value
* @returns { T }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @crossplatform
* @form
* @atomicservice
* @since 11
*/
grayscale(value: number): T;
在Index.ets入口页面,通过@state变量控制grayscale的赋值。在RN应用的入口文件root.ts,通过定时读取读取服务器上的json变量来实现对灰度模式的实时控制。
ArkTs中Index.ets
interface GeneratedObjectLiteralInterface_1 {
key: string;
value: string;
description: string;
}
@Entry
@Component
struct Index1 {
......
// 灰度模式控制变量
@State enableMourningDay: boolean = false;
aboutToAppear() {
......
// 注册原生发送给rn的emitter
this.registerNativeToJsEmitter();
}
registerNativeToJsEmitter() {
......
// RN发送消息给App
emitter.on(ConstUtil.event_id_rn_to_app, (data) => {
console.info('event_id_rn_to_app and data = ' + JSON.stringify(data));
// let object: GeneratedObjectLiteralInterface_1 = {key:'',value:'',description:''};
// 解析参数
let temp: GeneratedObjectLiteralInterface_1;
if (data && data.data && data.data.param && data.data.param) {
let object = JSON.parse(data.data.param) as GeneratedObjectLiteralInterface_1;
if (object) {
if (object.key === 'enable_mourning_day') {
this.enableMourningDay = (object.value == 'true'?true:false);
}
}
}
});
}
......
build() {
Column() {
if (this.rnohCoreContext && this.shouldShow) {
if (this.rnohCoreContext?.isDebugModeEnabled) {
RNOHErrorDialog({ ctx: this.rnohCoreContext })
}
......
}
}
.height('100%')
.width('100%')
.grayscale(this.enableMourningDay ? 1 : 0) // 灰度模式
}
}
RN中root.ts
function App(): JSX.Element {
......
const settingTimer = setInterval(() => {
xLog(TAG + ' 每隔一分钟读取后台设用于护理悼念模式 ');
getSetting();
}, 60 * 1000);
// 获取设置
async function getSetting() {
xnService.getSetting().then(data => {
if(data && data.length > 0){
for(let temp of data){
if(temp.key === 'enable_mourning_day'){
SystemTurboModule.pushStringToHarmony(JSON.stringify(temp),990008);
}
}
}
});
}
}
回顾下Android端的灰度模式实现---利用ColorMatrix。
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);//灰度效果
paint.setColorFilter(new ColorMatrixColorFilter(cm));
// 开启view硬件加速
/*
* 1、LAYER_TYPE_SOFTWARE
无论硬件加速是否打开,都会有一张Bitmap(software layer),并在上面对WebView进行软渲染。
好处:
在进行动画,使用software可以只画一次View树,很省。
什么时候不要用:
View树经常更新时不要用。尤其是在硬件加速打开时,每次更新消耗的时间更多。因为渲染完这张Bitmap后还需要再把这张Bitmap渲染到hardware layer上面去。
2、LAYER_TYPE_HARDWARE
硬件加速关闭时,作用同software。
硬件加速打开时会在FBO(Framebuffer Object)上面做渲染,在进行动画时,View树也只需要画一次。
两者区别:
1、一个是渲染到Bitmap,一个是渲染到FB上。
2、hardware可能会有一些操作不支持。
两者相同:
都是开了一个buffer,把View画到这个buffer上面去。
3、LAYER_TYPE_NONE
这个就比较简单了,不为这个View树建立单独的layer
* //如果页面有webView,需加上下面代码
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
* */
getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE,paint);
不经常在线,有问题可在微信公众号或者掘金社区私信留言
更多内容可关注
我的公众号悬空八只脚
作者:悬空八只脚
链接:https://juejin.cn/post/7470635421505159208
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
React Native开发鸿蒙Next---灰度模式的更多相关文章
- React Native开发入门
目录: 一.前言 二.什么是React Native 三.开发环境搭建 四.预备知识 五.最简单的React Native小程序 六.总结 七.参考资料 一.前言 虽然只是简单的了解了一下Reac ...
- React Native开发技术周报2
(1).资讯 1.React Native 0.22_rc版本发布 添加了热自动重载功能 (2).技术文章 1.用 React Native 设计的第一个 iOS 应用 我们想为用户设计一款移动端的应 ...
- React Native开发技术周报1
(一).资讯 1.React Native 0.21版本发布,最新版本功能特点,修复的Bug可以看一下已翻译 重要:如果升级 Android 项目到这个版本一定要读! 我们简化了 Android 应用 ...
- DECO 一个REACT NAtive 开发IDE工具
DECO 一个REACT NAtive 开发IDE工具. 目前只支持 OS,NO WINDOWS https://www.decosoftware.com/ 一个方便的快速 ERXPRESS 教程:h ...
- React Native 开发之 (02) 用Sublime 3作为React Native的开发IDE
Sublime Text是一个代码编辑器.也是HTML和散文先进的文本编辑器.漂亮的用户界面和非凡的功能,例如:迷你地图,多选择Python插件,代码段等等.完全可自定义键绑定,菜单和工具栏等等.漂亮 ...
- React Native 开发笔记
ReactNativeDemo 学习ReactNative开发,搭建ReactNative第一个项目 React Native 开发笔记 1.安装Homebrew $ /usr/bin/ruby -e ...
- 【转】【React Native开发】
[React Native开发]React Native控件之ListView组件讲解以及最齐全实例(19) [React Native开发]React Native控件之Touchable*系列组 ...
- React Native开发的通讯录应用
React Native开发的通讯录应用(使用JavaScript开发原生iOS应用,vczero) 0.前言: 项目地址:https://github.com/vczero/React-Native ...
- iOS程序员的React Native开发工具集
本文整理了React Native iOS开发过程中有用的工具.服务.测试.库以及网站等. 工具 你可以选择不同的开发环境:DECO.EXPO或者你可以使用Nuclide+Atom,目前我使用EXPO ...
- React-Native(二):React Native开发工具vs code配置
从网上翻阅了一些开发react-native的开发工具时,发现其实可选的工具还是比较多的Sublime Text,WebStrom,Atom+Nuclide,vs code 等.因为我用.net生态环 ...
随机推荐
- 本地如何访问vue2 生成的dist代码
前言 当你使用 Vue CLI 或其他构建工具构建 Vue 2 项目时,它会生成一个 dist 文件夹,这个文件夹包含了你项目的生产环境版本的静态资源文件(HTML.JavaScript 和 CSS) ...
- mac 触控板 三指拖动
1. 打开系统偏好设置 点击屏幕左上角的苹果图标(),选择"系统设置". 2. 打开指针控制 在系统偏好设置窗口左侧栏中,点击"辅助功能",然后在右侧列表中, ...
- mongodb关机重启
正确关闭 mongodb 查看 mongodb 进程 ps -ef | grep mongodb # 或者 ps -aux | grep mongodb 杀掉 mongodb 进程(不推荐) kill ...
- Linux SWAP交换分区应该设置多大?
乾乾君子 2019-02-21 15:21:02 23370 收藏 34分类专栏: 杂记 文章标签: linux centos swap分区版权 Linux SWAP交换分区,就是我们课本说讲过 ...
- 自制一个超级简单的 php 发邮件的轮子 simpleMailTool.php
simpleMailTool 程序链接 https://github.com/kohunglee/simpleMailTool/ 一个简单的 php 发邮件的轮子,跟其他著名大轮子相比(如 PHPMa ...
- JDK7-时间类、时间格式化类--java进阶day07
1.Date类:表示时间的类 1.Date常用的构造方法 . 2.Date常用的成员方法 1.getTime:返回从时间原点到对象设定的时间之间的时间 2.setTime:将对象的时间设置为setTi ...
- 写给自己的话,学院派 C 转 实用派Java
本人计算机专业出身,学校学习过C / VC++. 写过很一般的代码, 刷过北大百炼 ACM 的部分试题.学过数据结(还可以),数据库(学的一般会用sql).用 c指针链表构建过二叉树实现过哈夫曼编码加 ...
- tomghost打靶学习笔记(3)
主要内容 信息收集:ajp漏洞 横向提权:在没有办法立刻提升到管理员权限时,可以试试通过横向的权限提升切换到其他用户再做提权尝试 涉及尝试了前两台靶机没有用过的枚举方法,比如SUID 使用john解码 ...
- [T.3] 团队项目:团队基础设施及 DevOps 准备
项目 内容 这个作业属于哪个课程 首页 - 2025年春季软件工程(罗杰.任健) - 北京航空航天大学 - 班级博客 - 博客园 这个作业的要求在哪里 T.3 团队项目:团队基础设施及 DevOps ...
- cursor的mcp服务器安装(nodejs,npx安装和uv工具安装)
一.前言: 1.近期MCP服务器非常火爆,作为LLM大模型的通用工具手脚,MCP可以帮助LLM大模型实现更好的功能.本人经常使用cursor来进行代码的编辑,正巧cursor在0.47版本之后,MCP ...