【鸿蒙应用开发系列】- 应用置灰方案实现讲解

news2025/1/10 17:09:59

在某些特殊的日子里,有时候需要对应用进行一个置灰显示处理,在Android中,提供了一些很方便的方法,可以对控件或者应用进行灰色的展示

Android应用置灰方式

1、使用灰色主题皮肤(这个开发量比较大)

2、图片控件,比如ImageView的图片显示置灰, 可以使用setColorFilter 方法进行颜色饱和度设置

 

3、全局View设置置灰,在activity基类BaseActivity的onCreate方法中添加以下代码:

以上是Android侧应用置灰常见方式,那在鸿蒙应用(Java语言开发,JS或者TS开发这里不讲)中,应该怎么实现应用置灰功能呢?下面接着给大家介绍几种方式。

鸿蒙应用置灰方式

1、使用灰色主题皮肤(这个开发量比较大,这里不过多阐述)。

2、Image控件,怎么对加载的图片进行置灰处理呢,通过翻阅API,并未找到与之相关可以对Image控件设置颜色过滤的方法,但是在查阅过程中,发现PixelMapElement对象有setColorMatrix方法,而Image控件提供了一个

setImageElement方法,借此,我们这里自定义一个Image控件,提供对应的设置Colormatrix的方法,代码如下:

public class ColorMatrixImage extends Image {

    private ColorMatrix mColorMatrix;

    public ColorMatrixImage(Context context) {
        this(context, null);
    }

    public ColorMatrixImage(Context context, AttrSet attrSet) {
        this(context, attrSet, null);
    }

    public ColorMatrixImage(Context context, AttrSet attrSet, String styleName) {
        super(context, attrSet, styleName);
        init();
    }

    private void init() {
    }

    @Override
    public void setPixelMap(PixelMap pixelMap) {
        super.setPixelMap(pixelMap);
        if (mColorMatrix != null) {
            handleColorMatrix();
        }
    }

    public void setColorMatrix(ColorMatrix colorMatrix) {
        this.mColorMatrix = colorMatrix;
    }

    public void usedColorMatrix(ColorMatrix colorMatrix) {
        setColorMatrix(colorMatrix);
        handleColorMatrix();
    }

    private void handleColorMatrix() {
        PixelMapElement pixelMapElement = new PixelMapElement(getPixelMap());
        pixelMapElement.setColorMatrix(mColorMatrix);
        setImageElement(pixelMapElement);
    }

    public static ColorMatrix obtainColorMatrix(float saturation) {
        ColorMatrix colorMatrix = new ColorMatrix();
        colorMatrix.setSaturation(saturation);
        return colorMatrix;
    }
}

需要置灰的Image控件,使用该控件,就可以做到图片置灰功能,使用方法就是调用obtainColorMatrix(0),传入0 ,获取一个ColorMatrix,然后调用usedColorMatrix 置灰。

调用usedColorMatrix 前需要先调用setPixelMap将显示的图片资源设置了。

3、全局置灰功能,依旧是翻阅鸿蒙的组件API进行查找,可是依旧没有发现跟android类似的,对根视图 进行 setLayerType的方法,也找不到设置画笔Paint的方式。难受啊。

经过一顿操作尝试,终于找到了方法,灵感来自于对来自远端图片进行图片合成置灰的操作上,对画布进行处理。下面将方法提供,代码很短实现起来很简单。

  getComponentDelegate().getRootView().addDrawTask((component, canvas) ->
                canvas.drawColor(getColor(ResourceTable.Color_gray_999999), BlendMode.COLOR));

我们通过对根视图设置一个DrawTask,当视图绘制的时候,我们对其canvas,绘制一个灰色的颜色叠加上去,以此就能达到一个置灰的效果。

那怎么获取鸿蒙的根视图呢,这里需要开发者自行去维护(在创建页面视图的时候存起来),鸿蒙中未提供跟android类似的window.decorview方法。

本文结束,谢谢阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LOAM论文阅读

1. 摘要 本文提出一种实现激光雷达里程计与建图方法,使用6自由度的双轴激光雷达进行距离测量。问题的难点在于激光雷达的每一个点的时间戳都不同,运动估计的误差会影响激光点云的配准。目前相关的3D地图一般使用离线批处理方法构建,且使用闭…

回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出

回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出 目录回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出预测效果基本介绍程序设计参考资料预测效果 基本介绍 麻雀搜索算法(Sparrow Search Algorithm, SSA)是于…

2_Oracle_手工建库

一、手工建库的目的 1、方便理解Oracle的体系结构 2、更快更好的创建数据库 3、方便了解建库的每步细节 4、手工建库的实用性 二、dbca生成的脚本 /app/oracle/admin/orcl/scripts/ orcl.sh #!/bin/sh OLD_UMASKumask umask 0027 mkdir -p /app/oracle/admin/orcl/adump mkdi…

2022年度调味品十大热门品牌排行

调味品行业总量大,种类繁多,需求量大,且调味品作为生活必需品,与饮食文化紧密联系,也与人们的生活息息相关,如近日各省陆续全面放开后,也出现了北方抢黄头罐头南方抢醋的风潮。总体来说&#xf…

C++11后的常用容器和迭代器

文章目录一、string容器二、vector容器三、list容器1.构造函数2.特性操作3.元素操作4.赋值操作5.交换、反转、排序、归并6.比较操作7.插入和删除五、pair键值对四、map容器1.红黑树(平衡二叉排序树)2.构造函数3.特性操作4.元素操作5.赋值操作6.交换操作7…

Docker学习笔记5(狂神)

Docker网络: 我们学习docker的网络首先要删除我们所有的镜像: 我们发现我们有这么多的镜像。 我们现在来安装一下tomcat: linux能够ping通docker容器内部 再次测试ip addr 我们再启动一个容器测试: 发现又多了一对网卡。 3.我们来…

条件执行指令 CMP

CMP可以比较两个数的关系&#xff0c;其本质就是一条减法指令&#xff0c;只是不会将运算结果保存到寄存器&#xff0c;因为对于CPU而言&#xff0c;比较两个数时只关心结果是false还是true 指令格式&#xff1a;CMP <第一操作寄存器> <第二操作数> 第一操作寄…

【渐进式:深度光谱变换】

P2Sharpen: A progressive pansharpening network with deep spectral transformation &#xff08;P2Sharpen&#xff1a;一种具有深度光谱变换的渐进式全色锐化网络&#xff09; 大多数现有的基于深度学习方法pansharpening的监督任务仅仅依靠伪ground-truth多光谱图像,展示…

【猿如意】猿如意初用之感及editplus工具解绍

​​​​​​【猿如意】猿如意初用之感及editplus工具解绍 目录 一、猿如意初用之感 二、editplus工具下载安装渠道 三、工具介绍 四、功能介绍首先&#xff0c;EditPlus是一套功能强大的文本编辑器。 五、软件截图 六、软件安装过程 6.1在猿如意中的下载步骤 七、使用…

升级JSONB列式存储,Hologres助力淘宝搜索2022双11降本增效!

作者&#xff1a;陆晨炜&#xff08;花名遣云&#xff09;阿里巴巴智能引擎事业部数据开发 前言&#xff1a; 2022年的双11&#xff0c;阿里淘宝搜推集群承载上千万每秒的的流量峰值&#xff0c;消费者的每一次浏览、点击都通过搜推集群进行流转&#xff0c;与往年双11不同的…

[附源码]Python计算机毕业设计高校学生心理健康信息咨询系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

万字长文——MySQL基础一篇打通

准备工作 直接使用MySQL提供的数据&#xff0c;下载MySQL示例数据库 MySQL示例数据库模式由以下表组成&#xff1a; Customers&#xff1a;存储客户的数据。Products&#xff1a;存储比例模型车列表。ProductLines&#xff1a;存储产品系列类别列表。Orders&#xff1a;存储…

Web(九)JavaScript概述-JavaSript知识训练-入门基础

1、JavaScript是运行在( B)的脚本语言。 A、 服务器端 B、 客户端 C、 在服务器运行后&#xff0c;把结果返回到客户端 D、 在客户端运行后&#xff0c;把结果返回到服务端 2、JavaScript代码通常是用&#xff08; D&#xff09;标签嵌入到html文档的。 A、 JavaScript B、 La…

微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.5 查询Tomcat【实现查询】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存48 多级缓存48.5 查询Tomcat【实现查询】48.5.1 使用Http函数查询数据48 多级缓存 48.5 查询Tomcat【…

docker容器监控

docker容器监控 一、docker介绍 Docker的中文意思就是码头工人&#xff0c;进入到Docker的官方网站后&#xff0c;也可以看到Docker的图标&#xff0c;如下图所示。 这个Docker图标上就是一条鲸鱼&#xff0c;上面有很多集装箱&#xff0c;集装箱就相当于虚拟环境&#xff0c…

股票信息网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;

基于java+springmvc+mybatis+vue+mysql的志愿者招募网站

项目介绍 网络的广泛应用给生活带来了十分的便利。所以把志愿者招募管理与现在网络相结合&#xff0c;利用java技术建设志愿者招募网站&#xff0c;后端使用ssm框架&#xff0c;前端使用vue技术&#xff0c;实现志愿者招募的信息化。对于进一步提高志愿者招募管理发展&#xf…

【Java寒假打卡】Java基础-面向对象

【Java寒假打卡】Java基础-面向对象一、面向对象和面相过程二、类的定义三、对象的使用四、手机类的创建和使用五、单个对象的内存图六、两个引用指向同一内存图七、成员变量和局部变量八、priavte九、this关键字十、封装十一、构造方法十二、标准类一、面向对象和面相过程 对象…

童年辣条神话卫龙,首日破发“辣条第一股”,跌超10亿

“辣条第一股”的神话破了&#xff1f; 今日&#xff08;12月15日&#xff09;“辣条大王”卫龙美味全球控股有限公司&#xff08;下称“卫龙”&#xff0c;09985.HK&#xff09;正式挂牌港交所&#xff0c;但上市首日即遭破发。 作为千禧一代撑起的童年“神话”&#xff0c;…

GNN Algorithms (1): DeepWalk

DeepWalk Concept 图表示Graph Embedding based on Random Walk -> Graph GNN based neighbor aggregation. Graph Embedding使用低维稠密向量的形式表示图中的节点&#xff0c;使得在原始图中相似的节点在低维表达空间中也相似。 DeepWalk关键基础是Random Walk和word…