用ArkTs在鸿蒙系统上画一个世界杯海报

news/2024/7/21 9:22:15 标签: harmonyos, 鸿蒙, 程序人生

偶然看到了CSDN关于世界杯的征文活动:

在这里插入图片描述

用代码画一个足球? 哈哈很有意思!

想了想,画一个自定义View(足球),当然是使用Canvas了,但除了Canvas还有没有其它方法呢?那是必须的了,那就是使用SVG的Path去画!正好最近在开发harmneyOS应用,那就用鸿蒙的ArkTs去实现吧!

下面是使用ArkTs实现的世界杯海报效果图:

在这里插入图片描述

是不是有那么点意思了?哈哈…

关于鸿蒙项目开发流程及注意事项,可以参考本人的前两篇文章!

本项目结构:

在这里插入图片描述

实现逻辑:

首先自定义一个FootBall的组件:

@Entry
@Component
export struct FootBall {
  build() {
    Shape() {
      Path()
        .commands('M0 250 L0 250,500 250')
        .strokeWidth(1)
        .stroke("#000")

      Path()
        .commands('M250 0 L250 0,250 180')
        .strokeWidth(1)
        .stroke("#000")

      Path()
        .commands('M220 320 L220 320,150 423')
        .strokeWidth(1)
        .stroke("#000")

      Path()
        .commands('M280 320 L280 320,350 423')
        .strokeWidth(1)
        .stroke("#000")

      Path()
        .commands('M250 180 L250 180,180 250,220 320,280 320,320 250 Z')
        .fill('#000')

      Path()
        .commands('M250 50 L250 50,190 18 A120 120 0 0 1 310 18')
        .strokeWidth(1)
        .stroke("#000")

      Path()
        .commands('M50 250 L50 250,18 310 A120 120 0 0 1 18 190')
        .strokeWidth(1)
        .stroke("#000")

      Path()
        .commands('M450 250 L450 250,482 190 A120 120 0 0 1 482 310')
        .strokeWidth(1)
        .stroke("#000")

      Path()
        .commands('M150 423 L150 423,180 480 A120 120 0 0 1 80 423')
        .strokeWidth(1)
        .stroke("#000")

      Path()
        .commands('M350 423 L350 423,420 423 A120 120 0 0 1 320 480')
        .strokeWidth(1)
        .stroke("#000")
    }
    .height('500px')
    .width('500px')
    .backgroundColor("#FFFFFF")
    .borderRadius('250px')
  }
}

使用Shape画出一个背景为白色的圆,然后内部以圆心为中心画一个五边形,再在五边形的角所对方向的圆边缘画5个小扇形:

在这里插入图片描述

 Path()
        .commands('M0 250 L0 250,500 250')
        .strokeWidth(1)
        .stroke("#000")

M0 250即将“画笔”定位到坐标(0,250)的位置,L0 250即“画笔”从坐标(0,250)开始画线,到坐标(500, 250)位置结束!下面同理!

strokeWidth:画笔线宽;stroke画笔颜色;fill填充颜色;这几个属性,可以决定你画的图形是空心/线条,还是实心!

最关键的点,就是角度和坐标的计算,上面的效果图其实可以看出,我画出来的五边形,并非是正五边形,是因为我为了计算方便,取了个巧,如果有充足的时间以及数学只是掌握的很牢固的画,画出来一个正五边形,那效果会更上一层楼!当然,如果再厉害一点,可以使用贝塞尔曲线,画出一个具有立体感的足球,也是很赞的!

接下来,再自定义一个阴影的组件,这个就很简单了:

@Entry
@Component
export struct FootBallShadow {
  build() {
    Shape() {
      Ellipse()
        .width('100%')
        .height('100%')
    }
    .height('100px')
    .width('400px')
  }
}

最后就是主页引入两个组件的布局:

import { FootBallShadow } from './FootBallShadow';
import { FootBall } from './FootBall';

@Entry
@Component
struct Index {

  build() {
    Column() {
      Text("FIFA World Cup").fontSize(30)
        .linearGradient({
          direction: GradientDirection.Left, // 渐变方向
          colors: [[0xff0000, 0.0], [0xffff00, 0.5]] // 数组末尾元素占比小于1时满足重复着色效果
        })
        .fontWeight(600)
        .margin({ top: 100 })

      Text("Qatar 2022").fontColor(Color.Green).fontSize(20).margin({ top: 20 })

      Stack() {
        Row() {
          FootBallShadow()
        }
        .position({ x: "300px", y: "430px" })

        FootBall()
      }
      .alignContent(Alignment.TopStart)
      .width('600px')
      .height('500px')
      .margin({ top: '40%' })
    }
    .width('100%')
    .height('100%')
    .linearGradient(
      {
        angle: 180,
        colors: [['#BDE895', 0.1], ["#95DE7F", 0.6], ["#7AB967", 1]]
      })

  }
}

足球和阴影部分使用层叠布局Stack,这样,一个简单的世界杯海报就实现了!


http://www.niftyadmin.cn/n/17207.html

相关文章

Windows取证——记录系统事件的日志

目录 一、概要 二、Windows日志介绍 2.1 应用程序日志 2.2 系统日志 2.3 安全日志 三、查看与分析日志 四、常见事件ID 4.1 登录事件 4.1.1 4624登陆成功 4.1.2 4625登陆失败 4.2 特权使用 4.3 账户管理事件</

提面优秀资格上岸浙大MBA经验分享

三百多天的备考&#xff0c;终于等来了一个好的结果。曾经的我也一直在犹豫到底要不要放弃对于浙大的执念&#xff0c;虽然说我的工作是还行&#xff0c;但是我的第一学历只是一个不入流的二本院校&#xff0c;当时咨询的老师说是对于浙大提面来说&#xff0c;我肯定是要吃学历…

Java8 新特性——日期时间

Java8之前&#xff0c;日期时间&#xff1a;java.util.Date是可变类型&#xff0c;SimpleDateFormat非线程安全 旧版的 Java 中日期时间 API 问题&#xff1a; 非线程安全 − java.util.Date 是非线程安全的&#xff0c;所有的日期类都是可变的。 设计很差 − Java的日期/时间…

协同共进 | 中睿天下入会工业信息安全产业发展联盟

近日&#xff0c;中睿天下加入“工业信息安全产业发展联盟”&#xff0c;成为新一批会员单位。 工业信息安全是网络安全、国家安全的重要组成部分&#xff0c;涉及工业领域各个环节,涵盖工业控制系统安全、工业互联网安全、工业数据安全等各领域&#xff0c;直接关系到经济发展…

java计算机毕业设计基于安卓Android的订餐系统APP

项目介绍 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设…

【论文阅读】inception v1学习总结

【论文阅读总结】inception v1总结1. 摘要2. 序言3. 文献综述4.动机和高层考虑4.1提高深度神经网络性能的最直接方法4.1.1 增加模型的大小4.1.2 解决增加模型大小导致的缺点思路5.结构详述5.1 Inception架构的主要思想5.2 原生inception块问题5.3 解决通道数增加问题5.4 1*1卷积…

Android 音视频采集那些事

音视频采集 在整个音视频处理的过程中&#xff0c;位于发送端的音视频采集工作无疑是整个音视频链路的开始。在 Android 或者 IOS 上都有相关的硬件设备——Camera 和麦克风作为输入源。本章我们来分析如何在 Android 上通过 Camera 以及录音设备采集数据。 Camera 在 Andro…

木字楠后台管理系统开发(5):Vue登陆界面编写以及与后台联调测试

&#x1f3b6; 文章简介&#xff1a;木字楠后台管理系统开发(5)&#xff1a;Vue登陆界面编写以及与后台联调测试 &#x1f4a1; 创作目的&#xff1a;为了带大家完整的体验木字楠后台管理系统模版的开发流程 ☀️ 今日天气&#xff1a;愿冷空气冷藏你的烦恼,让快乐永驻。 &…