HarmonyOS鸿蒙Next之轮播图开发指南(Swiper组件)

HarmonyOS鸿蒙Next之轮播图开发指南(Swiper组件)

案例效果

实现一个支持自动播放、手动滑动、分页指示器的图片轮播组件

实现步骤

1. 创建基本布局结构

// 示例代码
@Entry
@Component
struct SwiperExample {
  @State currentIndex: number = 0
  private swiperController: SwiperController = new SwiperController()

  // 轮播图数据源
  @State swiperData: string[] = [
    "/common/images/banner1.jpg",
    "/common/images/banner2.jpg",
    "/common/images/banner3.jpg"
  ]

  build() {
    Column() {
      // Swiper容器
      Swiper(this.swiperController) {
        ForEach(this.swiperData, (item: string) => {
          Image(item)
            .width('100%')
            .height(200)
            .objectFit(ImageFit.Cover)
        })
      }
      .width('100%')
      .height(200)
      .loop(true)  // 循环播放
      .autoPlay(true)  // 自动播放
      .interval(3000)  // 3秒间隔
      .indicator(true)  // 显示分页指示器
      .onChange((index: number) => {
        this.currentIndex = index
      })
    }
  }
}

2. 自定义分页指示器

// 在Column中添加自定义指示器
Row() {
  ForEach(this.swiperData, (item: string, index: number) => {
    Circle()
      .width(8)
      .height(8)
      .fill(index === this.currentIndex ? Color.Blue : Color.Gray)
      .margin(5)
  })
}
.margin({ top: 10 })
.justifyContent(FlexAlign.Center)

3. 添加控制按钮(可选)

Row() {
  Button('上一张')
    .onClick(() => {
      this.swiperController.showPrevious()
    })

  Button('下一张')
    .onClick(() => {
      this.swiperController.showNext()
    })
}
.padding(10)

完整示例代码

@Entry
@Component
struct BannerSwiper {
  @State currentIndex: number = 0
  private swiperController: SwiperController = new SwiperController()

  @State swiperData: Resource[] = [
    $r('app.media.banner1'),
    $r('app.media.banner2'),
    $r('app.media.banner3')
  ]

  build() {
    Column() {
      // 轮播图主体
      Swiper(this.swiperController) {
        ForEach(this.swiperData, (item: Resource) => {
          Image(item)
            .width('100%')
            .height(240)
            .borderRadius(8)
            .objectFit(ImageFit.Cover)
        })
      }
      .width('90%')
      .height(240)
      .loop(true)
      .autoPlay(true)
      .interval(3000)
      .indicator(false)
      .onChange((index: number) => {
        this.currentIndex = index
      }

      // 自定义指示器
      Row() {
        ForEach(this.swiperData, (item: Resource, index: number) => {
          Circle()
            .width(index === this.currentIndex ? 12 : 8)
            .height(8)
            .fill(index === this.currentIndex ? '#007DFF' : '#33000000')
            .margin(4)
            .animation({ duration: 200, curve: Curve.EaseInOut })
        })
      }
      .margin({ top: 12 })
    }
    .width('100%')
    .padding(16)
  }
}

更多关于HarmonyOS鸿蒙Next之轮播图开发指南(Swiper组件)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,Swiper组件用于实现轮播图功能。Swiper组件支持水平或垂直方向的滑动,能够自动播放或手动滑动切换内容。开发者可以通过设置Swiper组件的属性来控制轮播图的行为,如循环播放、自动播放时间间隔、滑动方向等。

Swiper组件的主要属性包括:

  • index:当前显示的页面的索引。
  • autoPlay:是否自动播放。
  • interval:自动播放的时间间隔,单位为毫秒。
  • duration:滑动动画的持续时间,单位为毫秒。
  • loop:是否循环播放。
  • vertical:滑动方向是否为垂直。

Swiper组件通常与SwiperItem组件配合使用,每个SwiperItem代表一个轮播项。开发者可以在SwiperItem中添加图片、文本或其他UI元素来构建轮播图的内容。

示例代码:

<Swiper
  index="0"
  autoPlay="true"
  interval="3000"
  duration="500"
  loop="true"
  vertical="false">
  <SwiperItem>
    <Image src="image1.png" />
  </SwiperItem>
  <SwiperItem>
    <Image src="image2.png" />
  </SwiperItem>
  <SwiperItem>
    <Image src="image3.png" />
  </SwiperItem>
</Swiper>

通过合理配置Swiper组件的属性,开发者可以实现各种轮播图效果。

更多关于HarmonyOS鸿蒙Next之轮播图开发指南(Swiper组件)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,轮播图可以通过Swiper组件实现。Swiper用于展示一组可滑动的视图,常用于图片轮播、广告展示等场景。以下是开发步骤:

  1. 引入Swiper组件:在布局文件中使用<Swiper>标签。
  2. 配置Swiper属性:设置index(初始索引)、autoplay(自动播放)、interval(播放间隔)等属性。
  3. 添加内容:在<Swiper>内部使用<SwiperItem>定义每个轮播项,可包含图片、文本等。
  4. 处理事件:通过onChange事件监听轮播图切换。

示例代码:

<Swiper index="0" autoplay="true" interval="3000" onChange="onChange">
    <SwiperItem><Image src="image1.jpg"/></SwiperItem>
    <SwiperItem><Image src="image2.jpg"/></SwiperItem>
</Swiper>
回到顶部