HarmonyOS 如何实现券组件的挖空样式

如何实现券组件的挖空样式

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

参考demo:

// xxx.ets
@Entry
@Component
struct ShapeExample {
  private borderWdth: number = 2;
  private radiusWdthSmall: number = 8
  private radiusWdthBig: number = 10
  build() {
    Column({ space: 10 }) {
      Row(){
        Column(){
          Stack(){
            Column(){
              Text('618')
                .fontSize(10)
                .fontColor('#fff')
            }
            .position({
              x: 0,
              y: 0,
            })
            .width(40)
            .backgroundColor('rgba(255,255,255,0.3)')
            .borderRadius({
              topLeft: this.radiusWdthBig,
              bottomRight: this.radiusWdthBig,
            })
            Column(){
              Text(){
                Span('¥')
                  .fontSize(16)
                  .fontColor('#fff')
                Span('20')
                  .fontSize(20)

              }
              .fontColor('#fff')
              .fontWeight(FontWeight.Bold)
              Text(){
                Span('无门槛使用')
                  .fontSize(10)
                  .fontColor('#fff')
              }
            }

          }
          .width('100%')
          .height('100%')
        }
        .width(80)
        .height(80)
        .border({
          width: { left: this.borderWdth, right: 0, top: this.borderWdth, bottom: this.borderWdth },
          color: '#f00',
        })
        .borderRadius({
          topLeft: this.radiusWdthBig,
          bottomLeft: this.radiusWdthBig,
        })
        Column(){
          Row()
            .width(this.radiusWdthSmall)
            .height(this.radiusWdthSmall)
            .backgroundColor('#fff')
            .borderRadius({
              bottomLeft: this.radiusWdthSmall
            })
            .border({
              width: { left: this.borderWdth, right: 0, top: 0, bottom: this.borderWdth },
              color: '#f00',
            })
          Row()
            .width(this.radiusWdthSmall)
            .height(`calc(100% - ${2 * this.radiusWdthSmall}vp)`)
            .border({
              color: '#ccc',
              width: { left: 0, right: 1, top: 0, bottom: 0 },
              style: {
                right: BorderStyle.Dotted
              }
            })
          Row()
            .width(this.radiusWdthSmall)
            .height(this.radiusWdthSmall)
            .backgroundColor('#fff')
            .borderRadius({
              topLeft: this.radiusWdthSmall
            })
            .border({
              width: { left: this.borderWdth, right: 0, top: this.borderWdth, bottom: 0 },
              color: '#f00'
            })
        }
        .height('100%')
        .justifyContent(FlexAlign.SpaceBetween)
        Column(){
          Column()
            .width(this.radiusWdthSmall)
            .height(this.radiusWdthSmall)
            .backgroundColor('#fff')
            .borderRadius({
              bottomRight: this.radiusWdthSmall
            })
            .border({
              width: { left: 0, right: this.borderWdth, top: 0, bottom: this.borderWdth },
              color: '#f00',
            })
          Column()
            .width(this.radiusWdthSmall)
            .height(this.radiusWdthSmall)
            .backgroundColor('#fff')
            .borderRadius({
              topRight: this.radiusWdthSmall
            })
            .border({
              width: { left: 0, right: this.borderWdth, top: this.borderWdth, bottom: 0 },
              color: '#f00',
            })
        }
        .height('100%')
        .justifyContent(FlexAlign.SpaceBetween)
        Column(){
          Row(){
            Column(){
              Text(){
                Span('新客专享券')
                  .fontSize(12)

              }
              .fontColor('#fff')
              .margin({
                bottom: 6
              })
              Text(){
                Span('有效期至2024-8-30')
                  .fontSize(10)
                  .fontColor('#ddd')
              }
            }
            Stack(){
              Button('领取')
                .backgroundColor('#f00')
                .height(20)
                .fontSize(12)
                .margin(10)
            }
            .height('100%')
          }
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)
        }
        .height('100%')
        .width(`calc(100% - ${80 + 2 * this.radiusWdthSmall}vp)`)
        .border({
          width: { left: 0, right: this.borderWdth, top: this.borderWdth, bottom: this.borderWdth },
          color: '#f00',
        })
        .borderRadius({
          topRight: this.radiusWdthBig,
          bottomRight: this.radiusWdthBig,
        })
      }
      .width(300)
      .height(80)
      // .backgroundColor('#f00')
      .linearGradient({
        angle: 90,
        colors: [['rgba(255,0,0,0.7)', 0.0], ['rgba(255,0,0,0.3)', 1]]
      })
      .borderRadius(this.radiusWdthBig)
    }.width('100%').margin({ top: 15 })
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
如何实现一个仪表盘样式组件
428浏览 • 1回复 待解决
不同组件不同样式效果如何实现
355浏览 • 1回复 待解决
HarmonyOS 如何设定tabs组件tabbar样式
635浏览 • 1回复 待解决
HarmonyOS swiper组件样式
65浏览 • 1回复 待解决
@Extend样式如何组件共享?
2407浏览 • 1回复 待解决
HarmonyOS如何自定义视频组件样式
462浏览 • 1回复 待解决
HarmonyOS Text 组件 UI样式
40浏览 • 1回复 待解决
HarmonyOS 组件/容器设置背景样式
429浏览 • 1回复 待解决
HarmonyOS TextInput组件错误样式问题
578浏览 • 1回复 待解决
如何设置组件不同状态下样式
1938浏览 • 1回复 待解决
RichEditor组件如何设置初始字体样式
1031浏览 • 1回复 待解决