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

【HarmonyOS】鸿蒙仿iOS线性渐变实现

【HarmonyOS】仿照IOS中可以通过输入start=(0,0),end=(1,1)获取角度到.linearGradient,从而实现左上到右下渐变

class Point {
  x: number = 0
  y: number = 0
}


@Entry
@Component
struct Page57 {
  @State message: string = 'Hello World';

  //输入start=(0,0),end=(1,1)实现左上到右下渐变
  private calculateGradientAngle(start: Point, end: Point): number {
    // 计算两点之间的向量
    const dx = end.x - start.x;
    const dy = end.y - start.y;

    // 使用 Math.atan2(dy, dx) 计算角度
    // Math.atan2 返回的是弧度值,需要转换为角度
    const radian = Math.atan2(dy, dx);
    const degree = radian * (180 / Math.PI);

    console.info(`degree:${degree}`)
    // 根据实际情况调整角度
    // 从左上角到右下角的角度通常是 45 度
    return (90 + degree) % 360;
  }

  build() {
    Column() {
      Text('背景渐变')
      Row() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        //.blendMode(BlendMode.DST_IN, BlendApplyType.OFFSCREEN)
      }.linearGradient({
        angle: this.calculateGradientAngle({ x: 0, y: 0 }, { x: 1, y: 1 }),
        colors: [[0xff0000, 0.0], [0x0000ff, 1.0]]
      }) //.blendMode(BlendMode.SRC_OVER, BlendApplyType.OFFSCREEN)
      Text('文字渐变')
      Row() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .blendMode(BlendMode.DST_IN, BlendApplyType.OFFSCREEN)
      }.linearGradient({
        angle: this.calculateGradientAngle({ x: 0, y: 0 }, { x: 1, y: 1 }),
        colors: [[0xff0000, 0.0], [0x0000ff, 1.0]]
      }).blendMode(BlendMode.SRC_OVER, BlendApplyType.OFFSCREEN)
    }
    .width('100%')
    .height('100%')
  }
}


http://www.kler.cn/a/321569.html

相关文章:

  • 如何在Mac上切换到JDK 17开发环境
  • Wireshark中的length栏位
  • 单片机设计电流与温度监控python上位机监控平台设计
  • 随机数
  • 用友U8-Cloud uapbd.refdef.query sql注入漏洞复现
  • `node-gyp` 无法找到版本为 `10.0.19041.0` 的 Windows SDK
  • 如何像专家一样修复任何 iPhone 上的“iPhone 已禁用”错误
  • 【Go】Go语言切片(Slice)深度剖析与应用实战
  • chsharp文件如何查找在unity中使用的 位置?
  • 【React】组件通信
  • docker windows下清理后,磁盘空间未释放原因及解决方法
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27
  • Linux之我不会
  • 【stm32】TIM定时器输出比较-PWM驱动LED呼吸灯/舵机/直流电机
  • 使用Ruby进行视频内容的自动化分析
  • springboot+大数据基于数据挖掘的招聘信息可视化大屏系统【内含源码+文档+部署教程】
  • 调用飞书接口导入供应商bug
  • 高级java每日一道面试题-2024年9月26日-运维篇[分布式篇]-如何保证每个服务器的时间都是同步的?
  • 【vue-media-upload 升级玩法】一个页面用两个Uploader,一个上传图片,一个上传视频(分开传,容易分开设置和展示图片和视频)
  • 解决远程连接AlpineLinux Mysql/MariaDB 无法连接的问题
  • FortiGate 无线组网
  • 深度学习:卷积神经网络CNN
  • css div固定位置 div固定高度 文本固定高度 超出滚动
  • liunxcentos7下 跟目录空间不足docker load镜像报错空间不足
  • 泛型(Java)
  • 【稳定且高效的分治排序 —— 归并排序算法】