当前位置: 首页 > news >正文

Shader -> SweepGradient扫描渐变着色器详解

XML文件

<com.example.myapplication.MyViewxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_gravity="center"android:layout_height="400dp"/>

自定义View代码

class MyView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {private var mStartColor = Color.REDprivate var mMiddleColor = Color.BLUEprivate var mEndColor = Color.GREENprivate var mDrawRect = RectF()private var mSweepGradient: SweepGradient? = nullprivate var mDrawPaint = Paint()override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {super.onSizeChanged(w, h, oldw, oldh)mDrawRect = RectF(0f, 0f, w.toFloat(), h.toFloat())mSweepGradient = SweepGradient(mDrawRect.centerX(), // 渐变中心的 x 坐标,设置为矩形中心的 x 坐标mDrawRect.centerY(), // 渐变中心的 y 坐标,设置为矩形中心的 y 坐标intArrayOf(mStartColor, mMiddleColor, mEndColor), // 渐变颜色数组floatArrayOf(0f, 0.5f, 1f) // 颜色位置数组)}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)mSweepGradient?.let {mDrawPaint.shader = itcanvas.drawRect(mDrawRect, mDrawPaint)}}
}

RadialGradient线性着色器参数详解

  • RadialGradient扫描渐变着色器赋值给Paint画笔,可以使用Canvas画布和Paint画笔绘制具有扫描渐变的内容,从渐变中心点开始顺时针旋转,进行扫描渐变

构造函数

  • 构造函数:多色渐变
public SweepGradient(float cx, // 渐变中心的 x 坐标float cy, // 渐变中心的 y 坐标@NonNull int[] colors, // 渐变颜色数组@Nullable float[] positions) // 颜色位置数组
  • cx, cy: 渐变中心的坐标
  • colors: 定义渐变的颜色数组,至少需要两个颜色
  • positions: 可选的颜色位置数组,定义每个对应颜色的相对位置(0 到 1 之间的浮点数)。如果为 null,颜色将在渐变中均匀分布

渐变中心点(x, y)只决定中心位置,映射方向按照顺时针旋转扫描绘制

颜色数组IntArray和位置数组FloatArray决定颜色的数量和位置

  • 起始颜色 mStartColor 和过渡颜色 mMiddleColor 只作用于 [0f, 0.5f] 这个区间
  • 过渡颜色 mMiddleColor 和结束颜色 mEndColor 只作用于 [0.5f, 1f] 这个区间
mSweepGradient = SweepGradient(mDrawRect.centerX(), // 渐变中心的 x 坐标,设置为矩形中心的 x 坐标mDrawRect.centerY(), // 渐变中心的 y 坐标,设置为矩形中心的 y 坐标intArrayOf(mStartColor, mMiddleColor, mEndColor), // 渐变颜色数组floatArrayOf(0f, 0.5f, 1f) // 颜色位置数组
)

在这里插入图片描述

SweepGradient没有映射方式

  • SweepGradient 没有 TileMode着色器映射方式,用于创建完整的圆周渐变,没有边缘、重复、镜像的颜色去绘制着色器区域之外的渐变,绘制起始点和结束点都是同一个,为创建SweepGradient对象传入

相关文章:

Shader -> SweepGradient扫描渐变着色器详解

XML文件 <com.example.myapplication.MyViewxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_gravity"center"android:layout_height"400dp"/>自定义View代码 c…...

鼠标过滤驱动

文章目录 概述代码参考资料 概述 其编写过程大体与键盘过滤驱动相似&#xff0c;只需要切换一下附加的目标设备以及创建的设备类型等。但在该操作后依然无法捕获到Vmware创建的win7操作系统的鼠标irp信息&#xff0c;于是通过在获取鼠标驱动&#xff0c;遍历其所有的设备进而附…...

【深度学习】数据操作入门

数据操作 为了能够完成各种数据操作&#xff0c;我们需要某种方法来存储和操作数据。 通常&#xff0c;我们需要做两件重要的事&#xff1a;&#xff08;1&#xff09;获取数据&#xff1b;&#xff08;2&#xff09;将数据读入计算机后对其进行处理。 如果没有某种方法来存储…...

WIFIAP项目 5G RX二次谐波超标案例分析

一、 问题的现象及描述 采用博通WIFI方案方案的两个项目在做CE高频杂散测试时发现5G RX出现10.359 GHz的高频杂散点&#xff0c;通过更换信道&#xff0c;该杂散点跟着改变&#xff0c;最终确认该频率是5G主信号的二倍频&#xff1b;如下图&#xff1a; 二、 问题分析  由于…...

HarmonyOS(ArkUI框架介绍)

ArkUI框架介绍 ArkUI简介 基本概念 UI&#xff1a; 即用户界面。开发者可以将应用的用户界面设计为多个功能页面&#xff0c;每个页面进行单独的文件管理&#xff0c;并通过页面路由API完成页面间的调度管理如跳转、回退等操作&#xff0c;以实现应用内的功能解耦。 组件&…...

在 Ubuntu 下通过 Docker 部署 MySQL 服务器

引言 Docker 是一个开源的容器化平台&#xff0c;允许开发者将应用及其依赖打包成一个标准化的单元。MySQL 是一个广泛使用的关系型数据库管理系统&#xff0c;因其高性能、可靠性和易用性&#xff0c;成为许多应用的首选数据库。结合 Docker 和 MySQL&#xff0c;可以轻松地创…...

MCU 和 PSK

在加密和认证领域&#xff0c;MCU 和 PSK 是两个不同的概念&#xff0c;分别涉及硬件和密钥管理。下面是它们的含义和相关解释&#xff1a; 1. MCU 全称&#xff1a;Microcontroller Unit&#xff08;微控制单元&#xff09; 用途&#xff1a; MCU 是一种集成了 CPU、内存&am…...

Linux:进程概念(二.查看进程、父进程与子进程、进程状态详解)

目录 1. 查看进程 1.1 准备工作 1.2 指令&#xff1a;ps—显示当前系统中运行的进程信息 1.3 查看进程属性 1.4 通过 /proc 系统文件夹看进程 2. 父进程与子进程 2.1 介绍 2.2 getpid() \getppid() 2.3 fork()函数—通过系统调用创建进程 fork()函数疑问 3. 进程状态…...

苍穹外卖07——来单提醒和客户催单(涉及SpringTask、WebSocket协议、苍穹外卖跳过微信支付同时保证可以收到订单功能)

Spring Task介绍 应用场景&#xff1a; 信用卡每月还款提醒银行贷款每月还款提醒火车票销售系统处理未付款订单入职纪念日为用户发送通知 cron表达式 cron表达式其实就是一个字符串&#xff0c;通过cron表达式可以定义任务触发的时间。 构成规则&#xff1a;分为6或7个域&…...

C语言二级考试

你必须知道的 二级考试不是编写程序&#xff0c;或者说不只是编程的考核&#xff0c;它还会考核计算机C语言相关语言还有内涵等基础知识&#xff0c;比较全面综合&#xff08;说人话&#xff0c;要看最新考纲具备一定的基础知识&#xff09; 考试时间 120 分钟 分值 100 分&…...

IDEA Maven构建时报错:无效的目标发行版17

报错分析 报错原因&#xff1a;Maven 构建时&#xff0c;Java 版本配置不匹配 我安装的JDK版本是1.8&#xff0c;但由于种种原因&#xff0c;Maven构建时指定了 Java 17 作为目标发行版&#xff0c;从而导致错误 解决方案 首先&#xff0c;java -version&#xff0c;查看环…...

javafx 将项目打包为 Windows 的可执行文件exe

要将 JavaFX 项目打包为 .exe 文件&#xff0c;你可以使用一些工具将你的应用程序封装为 Windows 可执行文件。以下是两种常用的方法&#xff1a; 方法 1&#xff1a;使用 jpackage&#xff08;适用于 JDK 14 及更高版本&#xff09; jpackage 是 JDK 内置的工具&#xff0c;…...

Python操作Excel的库openpyxl使用入门

openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。以下是一些 openpyxl 的基本使用方法&#xff1a; 安装 openpyxl 首先&#xff0c;确保已经安装了 openpyxl。如果没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; pip install openp…...

数据通过canal 同步es,存在延迟问题,解决方案

当使用 Canal 同步数据到 Elasticsearch&#xff08;ES&#xff09;时&#xff0c;出现延迟问题通常源于多个因素&#xff0c;如 Canal 配置、网络延迟、ES 的负载和性能瓶颈等。以下是一些解决方案&#xff0c;帮助减少和解决延迟问题&#xff1a; 1. 优化 Canal 配置 Canal…...

了解Node.js

Node.js是一个基于V8引擎的JavaScript运行时环境&#xff0c;它允许JavaScript代码在服务器端运行&#xff0c;从而实现后端开发。Node.js的出现&#xff0c;使得前端开发人员可以利用他们已经掌握的JavaScript技能&#xff0c;扩展技能树并成为全栈开发人员。本文将深入浅出地…...

Android Studio创建新项目并引入第三方jar、aar库驱动NFC读写器读写IC卡

本示例使用设备&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bbW3AUC&ftt&id615391857885 一、打开Android Studio,点击 File> New>New project 菜单&#xff0c;选择 要创建的项目模版&#xff0c;点击 Next 二、输入项目名称…...

Oracle Dataguard(主库为双节点集群)配置详解(4):配置备库

Oracle Dataguard&#xff08;主库为双节点集群&#xff09;配置详解&#xff08;4&#xff09;&#xff1a;配置备库 目录 Oracle Dataguard&#xff08;主库为双节点集群&#xff09;配置详解&#xff08;4&#xff09;&#xff1a;配置备库一、为备库配置静态监听1、配置 li…...

前端炫酷动画--文字(二)

目录 一、弧形边框选项卡 二、零宽字符 三、目录滚动时自动高亮 四、高亮关键字 五、文字描边 六、按钮边框的旋转动画 七、视频文字特效 八、立体文字特效让文字立起来 九、文字连续光影特效 十、重复渐变的边框 十一、磨砂玻璃效果 十二、FLIP动画 一、弧形边框…...

ceph 数据均衡

实现数据均衡的主要方法 在 Ceph 集群中,实现 OSD(对象存储守护进程)之间的数据均衡对于提升性能和资源利用率至关重要。以下是实现数据均衡的主要方法: 1. 调整 OSD 权重(Reweight) 通过调整 OSD 的权重,可以控制数据在各个 OSD 之间的分布。Ceph 提供了根据利用率或…...

代码随想录算法训练营day29

代码随想录算法训练营 —day29 文章目录 代码随想录算法训练营前言一、134. 加油站暴力解法贪心算法 二、135. 分发糖果三、860. 柠檬水找零四、406.根据身高重建队列vector版list版 总结 前言 今天是算法营的第29天&#xff0c;希望自己能够坚持下来&#xff01; 今日任务&a…...

计算机专业四类毕业生就业全景对比:数据背后的残酷真相与报考抉择

数据来源&#xff1a;麦可思研究院《2025中国本科生就业报告》、教育部《2025年全国普通高校毕业生就业质量年度报告》、工信部《2025网络安全产业人才发展报告》、牛客Moka《2025春季校园招聘白皮书》、代码随想录星球薪资报告、知乎/B站等平台校招实况、CSDN/虎嗅/21经济网等…...

系统整体设计方案

业务架构设计项目架构图业务流程设计文档向量整个流程从用户上传文档开始&#xff0c;用户通过前端页面选择文档并设置相关的组织标签和可见信后系统开始接收文档。这个阶段的关键是建立文档的基本记录信息&#xff0c;包括文件的Md5哈希值文件原始名文件大小上传用户等信息。系…...

Windows平台Datax部署与初体验:从零到一的数据同步实战

1. Windows平台Datax部署全攻略 第一次在Windows上折腾Datax的经历我还记得很清楚&#xff0c;当时为了同步几个简单的数据表&#xff0c;硬是折腾了大半天。现在回头看&#xff0c;其实只要掌握几个关键步骤&#xff0c;半小时就能搞定。Datax作为阿里开源的数据同步工具&…...

Linux下objdump反汇编实战:从二进制文件到可读代码的深度解析

1. 初识objdump&#xff1a;二进制世界的翻译官 第一次接触objdump时&#xff0c;我把它比作"二进制世界的翻译官"。这个比喻来自我调试段错误时的经历——当时面对崩溃的core dump文件手足无措&#xff0c;直到同事教我用了objdump -d。这个GNU工具链中的瑞士军刀&a…...

STM32C8T6+AS608指纹模块实战:从接线到代码调试的全流程避坑指南

STM32C8T6AS608指纹模块实战&#xff1a;从接线到代码调试的全流程避坑指南 指纹识别技术正逐渐渗透到日常生活的各个角落&#xff0c;从手机解锁到门禁系统&#xff0c;这项技术为我们提供了便捷与安全的双重保障。对于嵌入式开发者而言&#xff0c;将指纹识别功能整合到自己的…...

COMSOL二维单管渗透注浆模拟:简单又强大

comsol二维单管渗透注浆模拟 可以模拟用于多种土层注浆扩散效果 模型简单易懂&#xff0c;注浆管周边网格进行细化 有模拟案例&#xff0c;有视频详细操作最近&#xff0c;我一直在研究注浆技术在土层加固中的应用&#xff0c;特别是在如何模拟注浆过程中的扩散效果。经过一段时…...

如何一次删除iPad上的多个应用程序? - 5 种有效方法

随着时间的推移&#xff0c;您的 iPad 可能会积累许多不必要的应用程序&#xff0c;导致存储空间不足并影响设备性能。因此&#xff0c;最好的方法是删除这些应用程序。然而&#xff0c;逐个删除它们可能很耗时&#xff1b;一次性删除多个应用程序可以更有效地释放空间并提高设…...

如何让任何老旧手柄在PC游戏中完美工作:3步终极解决方案

如何让任何老旧手柄在PC游戏中完美工作&#xff1a;3步终极解决方案 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 还在为心爱的游戏手柄无法在PC上使用而烦…...

告别原生依赖:用Docker在Jetson Nano上封装海康威视相机SDK与Python推理应用

边缘视觉革命&#xff1a;基于Docker的海康威视相机SDK与Python推理应用容器化实践 在工业检测、智能安防和自动驾驶等边缘计算场景中&#xff0c;海康威视工业相机与NVIDIA Jetson Nano的组合已成为经典配置。然而&#xff0c;当团队需要批量部署数十台设备时&#xff0c;传统…...

基于NLP-StructBERT的智能客服语义匹配实战:Java微服务集成

基于NLP-StructBERT的智能客服语义匹配实战&#xff1a;Java微服务集成 你有没有遇到过这种情况&#xff1f;用户问“我的订单怎么还没发货”&#xff0c;而你的知识库里只有“订单发货状态查询”这样的标准问题。传统的关键词匹配&#xff0c;比如搜索“订单”和“发货”&…...