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%')

  }
}
相关推荐
lbb 小魔仙9 小时前
【HarmonyOS实战】OpenHarmony + RN:自定义 useValidator 表单验证
华为·harmonyos
一起养小猫11 小时前
Flutter for OpenHarmony 实战:扫雷游戏完整开发指南
flutter·harmonyos
小哥Mark13 小时前
Flutter开发鸿蒙年味 + 实用实战应用|绿色烟花:电子烟花 + 手持烟花
flutter·华为·harmonyos
前端不太难14 小时前
HarmonyOS 游戏里,Ability 是如何被重建的
游戏·状态模式·harmonyos
lbb 小魔仙14 小时前
【HarmonyOS实战】React Native 鸿蒙版实战:Calendar 日历组件完全指南
react native·react.js·harmonyos
一只大侠的侠14 小时前
Flutter开源鸿蒙跨平台训练营 Day 3
flutter·开源·harmonyos
盐焗西兰花14 小时前
鸿蒙学习实战之路-Reader Kit自定义字体最佳实践
学习·华为·harmonyos
_waylau15 小时前
鸿蒙架构师修炼之道-架构师的职责是什么?
开发语言·华为·harmonyos·鸿蒙
一只大侠的侠15 小时前
【Harmonyos】Flutter开源鸿蒙跨平台训练营 Day 2 鸿蒙跨平台开发环境搭建与工程实践
flutter·开源·harmonyos
王码码203518 小时前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos