android灰色滤镜布局

news2024/9/24 17:10:46

android灰色滤镜布局

h5网页灰色滤镜

只要给 html 加下列css 样式就可以了

html {
    filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
    -webkit-filter: grayscale(100%);
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Android组件灰色滤镜

ColorMartrix类,这个类对外提供了很多 API,大家直接调用 API 就能得到大部分想要的效果了,除非你有特别特殊的操作,那么可以自己通过矩阵去运算。

像灰度这样的效果,我们可以通过饱和度 API来操作:

 //设置 1:彩色  0:黑白
setSaturation(float sat)

传入 0 就可以了,底层传入了一个特定的矩阵去做的运算。

自定义ImagView灰色滤镜

自定义ImagView

/**
 * 灰色滤镜 ImageView
 */
public class GrayImageView extends AppCompatImageView {
    private Paint mPaint = new Paint();

    public GrayImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        ColorMatrix cm = new ColorMatrix();
        //设置 1:彩色  0:黑白
        cm.setSaturation(0);
        mPaint.setColorFilter(new ColorMatrixColorFilter(cm));
    }

    @Override
    public void draw(Canvas canvas) {
        canvas.saveLayer(null, mPaint, Canvas.ALL_SAVE_FLAG);
        super.draw(canvas);
        canvas.restore();
    }
    /**
     * @desc 设置灰色页面
     */
    public void setGray(boolean isGray) {
        ColorMatrix cm = new ColorMatrix();
        //设置 1:彩色  0:黑白
        cm.setSaturation(isGray ? 0 : 1);
        mPaint.setColorFilter(new ColorMatrixColorFilter(cm));
        //重新绘制画布
        invalidate();
    }
}

layout

<com.inspur.grayscreen.view.GrayImageView
        android:id="@+id/giv_main_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"
        android:src="@drawable/ic_launcher_background" />

使用

  GrayImageView givImg= findViewById(R.id.giv_main_img);
        //false 彩色  true灰色
        givImg.setGray(false);

效果
在这里插入图片描述
在这里插入图片描述

自定义LinearLayout灰色滤镜

自定义LinearLayout

/**
 * 灰色滤镜 线性布局
 */
public class GrayLinearLayout extends LinearLayout {
    private Paint mPaint = new Paint();

    public GrayLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        ColorMatrix cm = new ColorMatrix();
        //设置 1:彩色  0:黑白
        cm.setSaturation(1);
        mPaint.setColorFilter(new ColorMatrixColorFilter(cm));
    }

    @Override
    public void draw(Canvas canvas) {
        canvas.saveLayer(null, mPaint, Canvas.ALL_SAVE_FLAG);
        super.draw(canvas);
        canvas.restore();
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        canvas.saveLayer(null, mPaint, Canvas.ALL_SAVE_FLAG);
        super.dispatchDraw(canvas);
        canvas.restore();
    }

    /**
     * @desc 设置灰色页面
     */
    public void setGray(boolean isGray) {
        ColorMatrix cm = new ColorMatrix();
        //设置 1:彩色  0:黑白
        cm.setSaturation(isGray ? 0 : 1);
        mPaint.setColorFilter(new ColorMatrixColorFilter(cm));
        //重新绘制画布
        invalidate();
    }
}

layout

<?xml version="1.0" encoding="utf-8"?>
<com.inspur.grayscreen.view.GrayLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/gll_main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_main_gray"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"
        android:text="灰色" />

    <Button
        android:id="@+id/btn_main_color"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"
        android:text="彩色" />

    <com.inspur.grayscreen.view.GrayImageView
        android:id="@+id/giv_main_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"
        android:src="@drawable/ic_launcher_background" />

</com.inspur.grayscreen.view.GrayLinearLayout>

使用

   GrayLinearLayout gllLayout = findViewById(R.id.gll_main_layout);
        //false 彩色  true灰色
        gllLayout.setGray(false);

效果
在这里插入图片描述
在这里插入图片描述
其他布局类似

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

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

相关文章

重点问题!CPU利用率过高排查思路|原创

本文讲解了重点面试问题CPU利用率高如何排查和解决。点击上方“后端开发技术”&#xff0c;选择“设为星标” &#xff0c;优质资源及时送达CPU利用率高怎么办&#xff1f;如何排查和解决这是一个常见的面试问题&#xff0c;也是线上常遇到的问题之一。遇到线上服务器异常告警&…

【Win10】如何关闭Windows10自动更新

如何关闭Windows10自动更新 零、问题 Windows10老是自动更新&#xff0c;有时候第二天起来又得重新打开软件&#xff0c;真麻烦&#xff0c;Win10自动更新的时候还有点卡。 如何关闭&#xff1f; 经过上网查询&#xff0c;发现完全关闭难度比较大&#xff0c;但是我们可以选…

HTML学生个人网站作业设计 明星易烊千玺介绍(HTML+CSS) web前端开发技术 web课程设计 网页规划与设计

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【信管2.5】项目可研(一)立项和可行性研究

项目可研&#xff08;一&#xff09;立项和可行性研究对于一个项目来说&#xff0c;最开始的步骤就是这个项目的立项过程。在这个过程中&#xff0c;我们要做的工作主要就是可行性研究。也就是说&#xff0c;这个项目值不值得我们来做&#xff0c;就需要对项目所涉及的领域、投…

fcpx插件:Stupid Raisins Grid Pop(网格弹出布局模板)

Stupid RAIsins Grid Pop是一款fcpx插件&#xff0c;可以在Final Cut Pro中快速布局任何网格弹出内容。为您轻松排队&#xff0c;均匀分配和安排任何物品&#xff01; 快速轻松地对齐fcpx中的所有内容&#xff01; Grid Pop是在Final Cut Pro X中进行布局&#xff0c;对齐和分布…

【RTS】安海波老师:SIP与RTC融合分享笔记

2020年已经应用。至今,呼叫中心与RTC结合,已经有了新探索。呼叫中心和RTC领域实践 : SIP与RTC融合 如何应用。五部分 贝壳联络中心 2018年分拆周三的财报:基于FS开源平台 <

(AVL)平衡二叉树

还是照旧&#xff0c;本篇主要讲一下代码实现&#xff0c;AVL相关的定义什么的这里不多赘述。 AVL树就是为了解决bst树出现了“线性”的问题&#xff0c;而发明的。什么是线性的就是一棵bst树全都只有左子树或者全都只有右子树&#xff0c;能想象来吧。 目录 LL型调整(左旋) …

HTML5期末考核大作业、HTML个人主页界面设计源码

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

uniapp 中 vuex 的使用

1. uniapp 中 vuex 的介绍 2. uniapp 中 vuex 的使用 3. require.context 介绍 4. vuex 模块分离 5. vuex 模块分离 - 代码优化 1. uniapp 中 vuex 的介绍 uniapp 内置了 vuex&#xff0c;不需像 vue 脚手架那样里通过 npm 安装了&#xff0c;我们只需要引用就行了 2. un…

会员接口治理的探索与实践

随着爱奇艺会员破亿&#xff0c;会员服务从小而快的单一业务系统升级为了按领域划分的微服务模式&#xff0c;满足了业务的高速发展和服务的高流量调用&#xff0c;但是微服务的拆分&#xff0c;系统间的交互越来越多&#xff0c;在需求开发时&#xff0c;协作成本随之增加&…

[激光原理与应用-30]:典型激光器 -2- 气体激光器 (连续激光器)

目录 第1章 概览 1.1 什么气体激光器 1.2 主要激励方式 1.3 发展历程 1.4 组成 1.5 特点 第2章 气体激光器分类 2.1 原子气体激光器 2.2 离子气体激光器 2.3 分子气体激光器 2.4 准分子激光器 第1章 概览 1.1 什么气体激光器 气体激光器利用气体作为工作物质产生激…

AlphaFold2源码解析(6)--模型之特征表征

AlphaFold2源码解析(6)–模型之特征表征 整体推理说明&#xff1a; Embedding只是在推理使用&#xff0c;影响非常小&#xff08;sup-Inference篇章&#xff09; 特征表征表示的入口模型如下&#xff1a; evoformer_module EmbeddingsAndEvoformer(self.config.embeddings_…

亚马逊卖家店铺没流量怎么办?这几个方法可以试试!

大家都知道亚马逊是一个产品为王的平台&#xff0c;只有我们的产品好&#xff0c;亚马逊就会给我们推送流量&#xff0c;作为一个新手卖家该如何帮亚马逊店铺来获取流量&#xff0c;今天赛狐ERP就来给卖家们几个方法&#xff0c;来获取流量。 1.自然搜索 自然流量顾名思义也就…

docker搭建测试,镜像保存并传输发布

Docker OPENJDK本身的docker占用526M &#xff0c;昨天我在本地测试的&#xff0c;加上我们的项目大小&#xff0c;最终创建的镜像大小大概是526M项目大小&#xff0c;镜像大小大概这么多&#xff0c;我们需要先在服务器上安装docker&#xff0c;之后安装dockerOpenJDK&#x…

LIO-SAM源码解析(四):imuPreintegration.cpp

1. 代码流程 2. 功能说明 这个cpp文件主要有两个类&#xff0c;一个叫IMUPreintegration类&#xff0c;一个叫TransformFusion类。 现在我们分开讲&#xff0c;先说IMUPreintegration类。 关于IMU原始数据&#xff0c;送入imuhandle中&#xff1a; 2.1. imuhandle imu原始…

re:Invent现场直击:无处不在的云计算

2012年&#xff0c;第一届亚马逊云科技re:Invent全球大会拉开帷幕的时候&#xff0c;许多人还不知道云计算为何物。2022年&#xff0c;第十一届亚马逊云科技re:Invent全球大会召开的时候&#xff0c;人们发现云计算已经是无处不在。云计算从遥不可及到无处不在美国当地时间2022…

Clock and Jitter

1、Jitter定义 定义1&#xff08;SONET规范&#xff09;&#xff1a;抖动可以定义为数字信号在重要时点上偏离理想时间位置的短期变化。 2、Total Jitter表征方式 2.1、周期抖动&#xff08;Period Jitter&#xff09;&#xff0c;与理想时钟无关&#xff0c;不累积 Period …

Qt之QPropertyAnimation移动动画

#include "cpropertyanimationtest.h" #include "ui_cpropertyanimationtest.h" #include<QPropertyAnimation> CPropertyAnimationTest::CPropertyAnimationTest(QWidget *parent) :QWidget(parent),ui

Mybatis练习(按值单条件查询)

Mybatis练习 安装MybatisX 接下来我们就使用Mybatis完成品牌数据的增删改查操作。以下是我们要完成功能列表&#xff1a; 查询 查询所有数据查询详情条件查询 添加修改 修改全部字段修改动态字段 删除 删除一个批量删除 创建数据库 数据库表&#xff08;tb_brand&#xff09;…

腾讯云服务器CVM和轻量应用服务器区别全方位对比

腾讯云轻量服务器和云服务器有什么区别&#xff1f;轻量应用服务器和云服务器CVM哪个更好&#xff1f;抛开价格及使用门槛&#xff0c;云服务器CVM更好&#xff1b;从性价比及易用性角度考虑&#xff0c;轻量应用服务器更好&#xff0c;轻量服务器性价比高&#xff0c;这个配置…