HarmonyOS:形状裁剪(clipShape)

一、简介

可利用clipShape 接口将组件裁剪为所需的形状。调用该接口后,可以保留该形状覆盖的组件部分,同时移除组件的其余部分。裁剪形状本身是不可见的。
说明 不同的形状支持的属性范围不同,路径是一种形状,除此之外还有椭圆、矩形等形状。

路径的形状不支持设置宽度和高度,具体形状支持的属性参考具体形状的文档。

形状中的fill属性对clipShape接口不生效。

二、裁剪圆形

通过设置CircleShape,将图片裁剪为圆形。 效果图

示例代码

c 复制代码
import { CircleShape } from '@kit.ArkUI'

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

  build() {
    Column({ space: 20 }) {
      //原图
      Image($r('app.media.mount'))
        .width('100%')

      // 用一个280px直径的圆对图片进行裁剪
      Image($r('app.media.mount'))
        .clipShape(new CircleShape({ width: '280px', height: '280px' }))
        .width('500px').height('280px')

      // 用一个350px直径的圆对图片进行裁剪
      Image($r('app.media.mount'))
        .clipShape(new CircleShape({ width: '350px', height: '350px' }))
        .width('500px').height('370px')
    }
    .height('100%')
    .width('100%')
    .padding({ top: 50 })
  }
}

三、裁剪椭圆形

通过设置EllipseShape,将图片裁剪为椭圆形。 效果图

示例代码

c 复制代码
import { CircleShape, EllipseShape } from '@kit.ArkUI'

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

  build() {
    Scroll() {
      Column({ space: 20 }) {
        //原图
        Image($r('app.media.mount'))
          .width('100%')

        Text('通过设置EllipseShape,将图片裁剪为椭圆形').fontSize(16).fontColor(Color.Black)
        Row({ space: 20 }) {
          // 用一个280px直径的圆对图片进行裁剪
          Image($r('app.media.mount'))
            .clipShape(new CircleShape({ width: '280px', height: '280px' }))
            .width('500px').height('280px')

          // 用一个350px直径的圆对图片进行裁剪
          Image($r('app.media.mount'))
            .clipShape(new CircleShape({ width: '350px', height: '350px' }))
            .width('500px').height('370px')
        }

        Text('通过设置EllipseShape,将图片裁剪为椭圆形').fontSize(16).fontColor(Color.Black)
        Row({ space: 20 }) {
          Image($r('app.media.background'))
            .clipShape(new EllipseShape({ width: '280px', height: '200px' }))
            .width('500px').height('400px')

          Image($r('app.media.background'))
            .clipShape(new EllipseShape({ width: '380px', height: '280px' }))
            .width('500px').height('400px')
        }
      }
      .width('100%')
    }
    .height('100%')
    .width('100%')

  }
}

四、裁剪矩形

通过设置RectShape,将图片裁剪为矩形。 效果图

示例代码

c 复制代码
import { CircleShape, EllipseShape, RectShape } from '@kit.ArkUI'

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

  build() {
    Scroll() {
      Column({ space: 20 }) {
        //原图
        Image($r('app.media.mount'))
          .width('100%')

        Text('通过设置EllipseShape,将图片裁剪为椭圆形').fontSize(16).fontColor(Color.Black)
        Row({ space: 20 }) {
          // 用一个280px直径的圆对图片进行裁剪
          Image($r('app.media.mount'))
            .clipShape(new CircleShape({ width: '280px', height: '280px' }))
            .width('500px').height('280px')

          // 用一个350px直径的圆对图片进行裁剪
          Image($r('app.media.mount'))
            .clipShape(new CircleShape({ width: '350px', height: '350px' }))
            .width('500px').height('370px')
        }

        Text('通过设置EllipseShape,将图片裁剪为椭圆形').fontSize(16).fontColor(Color.Black)
        Row({ space: 20 }) {
          Image($r('app.media.background'))
            .clipShape(new EllipseShape({ width: '280px', height: '200px' }))
            .width('500px').height('400px')

          Image($r('app.media.background'))
            .clipShape(new EllipseShape({ width: '380px', height: '280px' }))
            .width('500px').height('400px')
        }

        Text('通过设置RectShape,将图片裁剪为矩形').fontSize(16).fontColor(Color.Black)
        Row({ space: 20 }) {
          Image($r('app.media.background'))
            .clipShape(new RectShape({ width: '200px', height: '200px' }))
            .width('500px').height('400px')

          Image($r('app.media.background'))
            .clipShape(new RectShape({ width: '380px', height: '280px' }))
            .width('500px').height('400px')
        }

      }
      .width('100%')
    }
    .height('100%')
    .width('100%')

  }
}

五、裁剪不规则形状

通过设置PathShape,将图片裁剪为不规则形状。 效果图

示例代码

c 复制代码
import { CircleShape, EllipseShape, PathShape, RectShape } from '@kit.ArkUI'

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

  build() {
    Scroll() {
      Column({ space: 20 }) {
        //原图
        Image($r('app.media.mount'))
          .width('100%')

        Text('通过设置EllipseShape,将图片裁剪为椭圆形').fontSize(16).fontColor(Color.Black)
        Row({ space: 20 }) {
          // 用一个280px直径的圆对图片进行裁剪
          Image($r('app.media.mount'))
            .clipShape(new CircleShape({ width: '280px', height: '280px' }))
            .width('500px').height('280px')

          // 用一个350px直径的圆对图片进行裁剪
          Image($r('app.media.mount'))
            .clipShape(new CircleShape({ width: '350px', height: '350px' }))
            .width('500px').height('370px')
        }

        Text('通过设置EllipseShape,将图片裁剪为椭圆形').fontSize(16).fontColor(Color.Black)
        Row({ space: 20 }) {
          Image($r('app.media.background'))
            .clipShape(new EllipseShape({ width: '280px', height: '200px' }))
            .width('500px').height('400px')

          Image($r('app.media.background'))
            .clipShape(new EllipseShape({ width: '380px', height: '280px' }))
            .width('500px').height('400px')
        }

        Text('通过设置RectShape,将图片裁剪为矩形').fontSize(16).fontColor(Color.Black)
        Row({ space: 20 }) {
          Image($r('app.media.background'))
            .clipShape(new RectShape({ width: '200px', height: '200px' }))
            .width('500px').height('400px')

          Image($r('app.media.background'))
            .clipShape(new RectShape({ width: '380px', height: '280px' }))
            .width('500px').height('400px')
        }

        Text('通过设置PathShape,将图片裁剪为不规则形状').fontSize(16).fontColor(Color.Black)
        Row() {
          Image($r('app.media.background'))
            .clipShape(new PathShape({ commands: 'M0 0 H400 V200 H0 Z' }))
            .width('500px').height('300px')
        }
        .clip(true)
        .borderRadius(20)

      }
      .width('100%')
    }
    .height('100%')
    .width('100%')

  }
}
相关推荐
nashane4 小时前
HarmonyOS 6学习:CapsLock键失效诊断与长截图完整实现指南
学习·华为·harmonyos
richard_yuu6 小时前
鸿蒙心理测评模块实战|PHQ-9/GAD7双量表答题、实时计分与结果本地化存储
华为·harmonyos
不爱吃糖的程序媛9 小时前
2026年Electron 鸿蒙PC环境搭建指南
人工智能·华为·harmonyos
nashane9 小时前
HarmonyOS 6学习:长截图功能开发中的滚动拼接与权限处理实战
人工智能·华为·harmonyos
大师兄666810 小时前
从零开发一个 HarmonyOS 输入法——KikaInputMethod 完整拆解
harmonyos·服务卡片·harmonyos6·formkit
Python私教15 小时前
鸿蒙 NEXT 也能接 MCP?用 ArkTS 跑通 AI Agent 工具链
人工智能·华为·harmonyos
Swift社区18 小时前
分布式能力在鸿蒙 PC 上到底怎么用?
分布式·华为·harmonyos
nashane1 天前
HarmonyOS 6学习:外接键盘CapsLock与长截图功能的实战调试与完整解决方案
学习·华为·计算机外设·harmonyos
aqi001 天前
一文理清 HarmonyOS 6.0.2 涵盖的十个升级点
android·华为·harmonyos·鸿蒙·harmony