当前位置: 首页 > 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对象传入
http://www.lryc.cn/news/519261.html

相关文章:

  • 鼠标过滤驱动
  • 【深度学习】数据操作入门
  • WIFIAP项目 5G RX二次谐波超标案例分析
  • HarmonyOS(ArkUI框架介绍)
  • 在 Ubuntu 下通过 Docker 部署 MySQL 服务器
  • MCU 和 PSK
  • Linux:进程概念(二.查看进程、父进程与子进程、进程状态详解)
  • 苍穹外卖07——来单提醒和客户催单(涉及SpringTask、WebSocket协议、苍穹外卖跳过微信支付同时保证可以收到订单功能)
  • C语言二级考试
  • IDEA Maven构建时报错:无效的目标发行版17
  • javafx 将项目打包为 Windows 的可执行文件exe
  • Python操作Excel的库openpyxl使用入门
  • 数据通过canal 同步es,存在延迟问题,解决方案
  • 了解Node.js
  • Android Studio创建新项目并引入第三方jar、aar库驱动NFC读写器读写IC卡
  • Oracle Dataguard(主库为双节点集群)配置详解(4):配置备库
  • 前端炫酷动画--文字(二)
  • ceph 数据均衡
  • 代码随想录算法训练营day29
  • android studio根据包名获取当前安装包信息
  • 学习第六十五行
  • 零碎的知识点(七):线性二次调节器(LQR)是什么?
  • Matlab一些使用技巧
  • Linux 发行版介绍与对比:Red Hat、Ubuntu、Kylin、Debian
  • 从CentOS到龙蜥:企业级Linux迁移实践记录(龙蜥开局)
  • java1-相对路径与绝对路径
  • iChainfo 品牌升級為 ichaingo,打造 Web3 數據基礎設施新標杆
  • Flink概念知识讲解之:Restart重启策略配置
  • [java基础-集合篇]LinkedList源码粗析
  • 面试:C++类成员初始化顺序