四、线性径向渐变、阴影、space、主轴交叉轴对齐方式

1. 渐变

线性渐变 linearGradient

径向渐变 radialGradient

@Entry
@Component
struct Index {
  build() {
    Column({space:10}) {
      Text('线性渐变')
        .width(100)
        .height(100)
        .backgroundColor('#FFCD44')
        // 线性渐变
        // angle和direction,angle设置后direction不生效
        .linearGradient({
          // 线性渐变的起始角度
          angle:45,
          // 线性渐变方向
          direction:GradientDirection.Right,
          // 颜色
          colors:[[Color.Pink,0],[Color.Green,0.8]],
        //   是否重复着色
          repeating:true,
        })

      Text('径向渐变')
        .width(100)
        .height(100)
        .backgroundColor('#FFCD44')
          // 径向渐变
        .radialGradient({
          //中心点坐标 默认左上角
          center:[50,40],
          // 径向渐变的半径
          radius:50,
          colors:[[Color.Pink,0],[Color.Green,1]],
        })
    }
    .height('100%')
    .width('100%')
  }
}

2. 阴影 shadow

@Entry
@Component
struct Index {
  build() {
    Column({space:10}) {
      Text('阴影shadow')
        .fontSize(20)
        .fontWeight(600)
        .width(150)
        .height(150)
        .backgroundColor('#FFCD44')
        .textAlign(TextAlign.Center)
        // 阴影
        .shadow({
          // 阴影半径
          radius:20,
          // 阴影颜色,透明度
          color:'#9e000000',
          // X轴偏移
          offsetX:2,
          // Y轴偏移
          offsetY:5
        })
    }
    .height('100%')
    .width('100%')
  }
}

3. 案例-华为商品卡片

@Entry
@Component
struct Index {
  build() {
    Column({space:10}) {
      // 案例-华为商品卡片
      Column(){
        Image($r('app.media.all_x5'))
          .width('100%')
        Text('HUAWEI MateX5')
          .width('100%')
          .fontSize(25)
          .fontWeight(600)
          .margin({top:10,bottom:10})
        Text('¥12999起')
          .width('100%')
          .margin({top:10,bottom:10})
        Row(){
          Text('了解更多')
          Image($r('app.media.ic_public_arrow_right'))
            .width(16)
            .margin({right:10})
          Text('购买')
          Image($r('app.media.ic_public_arrow_right'))
            .width(16)
        }
        .width('100%')
        .margin({top:10,bottom:10})
        // .backgroundColor(Color.Yellow)

      }
      .width('80%')
      .backgroundColor('#fff')
      .padding(10)
      .borderRadius(10)
      .shadow({
        radius:10
      })
    }
    .height('100%')
    .width('100%')
    .backgroundColor('#ececec')
  }
}

4. space

@Entry
@Component
struct Index {
  build() {
    Column() {
      // 主布局方向 内容之间添加相等的间距
      // 主布局方向就是内容的排列的方向
      // Column({ space: 10 }) {
      Row({ space: 10 }) {
        Text('1')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
        Text('2')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
        Text('3')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
      }
      .width(200)
      .height(200)
      .backgroundColor(Color.Blue)
    }
    .height('100%')
    .width('100%')
    .backgroundColor('#ececec')
  }
}

5. 主轴对齐方式 justifyContent

@Entry
@Component
struct Index {
  build() {
    Column({space:20}) {
      Row() {
        Text('1')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
        Text('2')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
        Text('3')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
      }
      .width(200)
      .height(200)
      .backgroundColor(Color.Blue)
      // 主轴对齐方式
      // 主轴方向上不设置尺寸,justifyContent属性不生效
      .justifyContent(FlexAlign.SpaceBetween)

      Column() {
        Text('1')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
        Text('2')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
        Text('3')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
      }
      .width(200)
      .height(200)
      .backgroundColor(Color.Blue)
      .justifyContent(FlexAlign.SpaceBetween)
    }
    .height('100%')
    .width('100%')
    .backgroundColor('#ececec')
  }
}

6. 案例-得物商品卡片

@Entry
@Component
struct Index {
  build() {
    Column({space:20}) {
      // 案例-得物产品卡片
      Column(){
        // 产品图片
        Image($r('app.media.nick'))
          .width('100%')
          // .borderRadius({topLeft:10,topRight:10})
        // 文字区域
        Column({space:10}){
          // 标题
          Text('今晚吃这个 | 每日艺术分享No.43')
            .fontSize(18)
            .lineHeight(25)
            .width('100%')
            .fontWeight(600)

          // 最下一行 作者及点赞量
          Row(){
            // 左边 作者头像及昵称
            Row({space:5}){
              Image($r('app.media.user'))
                .width(20)
                .aspectRatio(1)
                .borderRadius(10)
                // .borderRadius('50%')
              Text('插画师分享聚集地')
                .fontSize(14)
            }
            // 右边 点赞图标及点赞量
            Row({space:5}){
              Image($r('app.media.ic_like'))
                .width(16)
                .fillColor(Color.Gray)
              Text('2300')
                .fontSize(14)
                .fontColor(Color.Gray)
            }
          }
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)
        }
        .width('100%')
        .padding(10)
        // .backgroundColor(Color.Yellow)
      }
      .width('70%')
      .borderRadius(10)
      // 裁剪,如图片左上及右上溢出的角角
      .clip(true)
      .shadow({
        radius:10
      })
    }
    .height('100%')
    .width('100%')
    .backgroundColor('#ececec')
  }
}

7. 交叉轴对齐方式及主轴自适应缩放

alignItems

alignSelf

layoutWeight

@Entry
@Component
struct Index {
  build() {
    Column({space:20}) {
      Row() {
        Text('1')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
        Text('2')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
          // 单个子元素交叉轴对齐方式 Stretch拉伸
          .alignSelf(ItemAlign.Stretch)
          // 主轴方向-自适应缩放
          .layoutWeight(1)
        Text('3')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
      }
      .width(200)
      .height(200)
      .backgroundColor(Color.Blue)
      // .justifyContent(FlexAlign.SpaceBetween)

      // 交叉轴对齐方式
      .alignItems(VerticalAlign.Bottom)

      Column() {
        Text('1')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
        Text('2')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
          .alignSelf(ItemAlign.Stretch)
        Text('3')
          .width(50)
          .height(50)
          .backgroundColor(Color.Green)
      }
      .width(200)
      .height(200)
      .backgroundColor(Color.Blue)
      .justifyContent(FlexAlign.SpaceBetween)
      .alignItems(HorizontalAlign.Start)
    }
    .height('100%')
    .width('100%')
    .backgroundColor('#ececec')
  }
}

8. 案例-用户关注

@Entry
@Component
struct Index {
  build() {
    Column() {
      // 案例-用户关注
      Row({space:5}) {
        // 头像
        Image($r('app.media.user'))
          .width(50)
          .borderRadius(25)
        //  昵称
        Text('插画设计师')
          .fontSize(20)
          .fontWeight(700)
          .layoutWeight(1)
        // 关注
        Text('关注')
          .fontSize(16)
          .padding({ left:10,right:10,top:5,bottom:5 })
          .border({
            width: 2,
            color: Color.Grey,
            radius:5
          })
          // .borderRadius(8)
      }
      .width('100%')
      .padding(10)
      .backgroundColor(Color.White)
    }
    .height('100%')
    .width('100%')
    .padding(10)
    .backgroundColor('#ececec')
  }
}

9. 案例-头条新闻

@Entry
@Component
struct Index {
  build() {
    Column() {
      // 案例-头条新闻
      Row({space:5}){
        // 左边文字区域
        Column(){
          Text('第五个国际数学日,全世界和数据一起玩儿')
            .fontSize(14)
          Row(){
            Text('中国青年网 昨天')
              .fontSize(12)
              .fontColor(Color.Gray)
              // .layoutWeight(1)
            Image($r('app.media.ic_close'))
              .width(12)
              .fillColor('#999')
          }
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)
        }
        .height('100%')
        // 主轴对齐方式
        .justifyContent(FlexAlign.SpaceBetween)
        // 交叉轴对齐方式
        .alignItems(HorizontalAlign.Start)
        // 父组件主轴方向上自适应缩放
        .layoutWeight(1)

        // 右边图片区域
        Image($r('app.media.math'))
          .width(90)
      }
      .width('100%')
      .height(80)
      .padding(10)
      .backgroundColor(Color.White)
    }
    .height('100%')
    .width('100%')
    .padding(10)
    .backgroundColor('#ececec')
  }
}

10. 作业1_大众点评产品简介

@Entry
@Component
struct Index {
  build() {
    Column() {
      // 大众点评产品简介
      Column(){
        // 图片区域
        Image($r('app.media.product'))
          .width('100%')
        // 卡片文字区域
        Column({space:5}){
          Text('大家看一下要不要50元门票走一趟')
            .width('100%')
            .fontSize(15)
            .lineHeight(22)
          Row(){
            // 左边 头像及昵称
            Row({space:3}){
              Image($r('app.media.avatar'))
                .width(20)
                .aspectRatio(1)
                .borderRadius(10)
              Text('Nina_8888')
                .fontSize(14)
                .fontColor('#666666')
            }
            // 右边 点赞图标及点赞量
            Row({space:3}){
              Image($r('app.media.ic_like'))
                .width(14)
                .fillColor('#999999')
              Text('8888')
                .fontSize(14)
                .fontColor('#999999')
            }
          }
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)
        }
        .width('100%')
        .padding({ top:5,left:5,right:5,bottom:10 })
      }
      .width(200)
      .backgroundColor(Color.White)
      .borderRadius(10)
      .clip(true)
    }
    .height('100%')
    .width('100%')
    .padding(10)
    .backgroundColor('#ececec')
  }
}

11. 作业2_多点产品卡片(怡宝)

@Entry
@Component
struct Index {
  build() {
    Column() {
      // 多点 产品卡片
      Column() {
        // 图片
        Image($r('app.media.yibao'))
          .width('100%')
        // 文字
        Column({ space: 10 }) {
          Text('怡宝纯净水 555ml*12')
            .fontSize(14)
          Text('采用全球现金净水科技,二级反。采用全球现金净水科技,二级反')
            .maxLines(1)
            .fontSize(12)
            .fontColor('#666666')
            .textOverflow({ overflow: TextOverflow.Ellipsis })
          Row() {
            // 左边价格
            Column({ space: 3 }) {
              Text('¥ 10.90')
                .fontSize(14)
                .fontColor('#f60')
              Text('¥ 17.00')
                .fontSize(12)
                .fontColor('#999')
                .decoration({
                  type: TextDecorationType.LineThrough,
                  color: '#999'
                })
            }
            // 右边图片
            Image($r('app.media.ic_jia'))
              .width(16)
              .aspectRatio(1)
              .borderRadius(8)
              .backgroundColor('#f60')
              .padding(3)
          }
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)
        }
        .alignItems(HorizontalAlign.Start)
        .padding({
          top: 10,
          left: 5,
          right: 5,
          bottom: 10
        })
      }
      .width(200)
      .borderRadius(10)
      .clip(true)
      .backgroundColor('#fff')
    }
    .height('100%')
    .width('100%')
    .padding(10)
    .backgroundColor('#ececec')
  }
}

12. 作业3_淘宝订单

独立练习

@Entry
@Component
struct Index {
  build() {
    Column() {
      // 淘宝订单
      Row(){
        // 左边图片
        Image($r('app.media.top1'))
          .width(80)
          .borderRadius(8)
        // 中间区域
        Column({space:8}){
          // 第一行
          Row(){
            Text('程序员2024春季新款百搭程序员2024春季新款百搭')
              .fontWeight(600)
              .maxLines(1)
              .textOverflow({overflow:TextOverflow.Ellipsis})
              .layoutWeight(1)
            Text('¥359')
              .fontWeight(600)
          }
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)

          // 第二行
          Row(){
            Text('条纹/XXL')
              .fontColor('#999')
              .fontSize(14)

            Row(){
              Image($r('app.media.ic_x'))
                .fillColor('#999')
                .width(12)
              Text('1')
                .fontSize(14)
                .fontColor('#999')
            }
          }
          .width('100%')
          .justifyContent(FlexAlign.SpaceBetween)

          // 第三行
          Row({space:5}){
            Text('假一赔四')
              .fontSize(12)
              .fontColor('#f60')
              .border({
                width:1,
                color:'#f60',
                radius:3
              })
              .padding(2)
            Text('7天无理由退换')
              .fontSize(12)
              .fontColor('#f60')
              .border({
                width:1,
                color:'#f60',
                radius:3
              })
              .padding(2)
          }
          .width('100%')
        }
        .padding(5)
        .height('100%')
        // .backgroundColor(Color.Yellow)
        .layoutWeight(1)
      }
      .width('100%')
      .height(100)
      .padding(5)
      .backgroundColor(Color.White)
    }
    .height('100%')
    .width('100%')
    .padding(10)
    .backgroundColor('#ececec')
  }
}

老师讲解+ForEach进阶

@Entry
@Component
struct Index {
  @State
  arr: string[] = ['假一赔四', '7天无理由退换']

  build() {
    Column() {
      //   241026
      //   淘宝订单老师讲解后练习
      //   布局 左中右(与昨天布局不一样)
      Row({ space: 5 }) {
        // 左边图片
        Image($r('app.media.top1'))
          .width(80)
          .borderRadius(8)
          // 图片闪烁
          .syncLoad(true)

        // 中间区域
        Column({ space: 8 }) {
          // 第一行
          Text('程序员2024春季新款百搭程序员2024春季新款百搭')
            .fontWeight(600)
            .maxLines(1)
            .textOverflow({ overflow: TextOverflow.Ellipsis })
            .fontSize(14)
          // 第二行
          Text('条纹/XXL')
            .fontColor('#999')
            .fontSize(14)

          // 第三行
          // 渲染控制练习ForEach
          Row({ space: 5 }) {
            ForEach(this.arr, (item: string) => {
              Text(`${item}`)
                .fontSize(12)
                .fontColor('#f60')
                .border({
                  width: 1,
                  color: '#f60',
                  radius: 3
                })
                .padding(2)
            })
            /*Text('7天无理由退换')
              .fontSize(12)
              .fontColor('#f60')
              .border({
                width: 1,
                color: '#f60',
                radius: 3
              })
              .padding(2)*/
          }
        }
        .layoutWeight(1)
        .height('100%')
        .alignItems(HorizontalAlign.Start)

        // 右边区域
        Column({ space: 8 }) {
          // 第一行
          Text('¥359')
            .fontWeight(600)
            .fontSize(14)
          // 第二行
          Row() {
            Image($r('app.media.ic_x'))
              .fillColor('#999')
              .width(12)
            Text('1')
              .fontSize(14)
              .fontColor('#999')
          }
        }
        .height('100%')
        .alignItems(HorizontalAlign.End)
      }
      .width('100%')
      .height(100)
      .padding(10)
      .backgroundColor(Color.White)
    }
    .height('100%')
    .width('100%')
    // .padding(10)
    .backgroundColor('#ececec')
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值