HarmonyOS Swiper组件的Indicator能支持间距设置吗

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

当前Swiper自有的属性不支持设置指示器的间距,如果要设置间距,需要自定义UI来实现指示器,会比较复杂。

以下示例代码给出了样例供参考:

// xxx.ets
class MyDataSource implements IDataSource {
  private list: number[] = []

  constructor(list: number[]) {
    this.list = list
  }

  totalCount(): number {
    return this.list.length
  }

  getData(index: number): number {
    return this.list[index]
  }

  registerDataChangeListener(listener: DataChangeListener): void {
  }

  unregisterDataChangeListener() {
  }
}

也可以参考以下demo,或者备选方案也可以引入三方库来实现自定义指示器,参考文档https://gitee.com/openharmony-sig/ohos_banner

class MyDataSource1 implements IDataSource {
  private list: number[] = []

  constructor(list: number[]) {
    this.list = list
  }

  totalCount(): number {
    return this.list.length
  }

  getData(index: number): number {
    return this.list[index]
  }

  registerDataChangeListener(listener: DataChangeListener): void {
  }

  unregisterDataChangeListener() {
  }
}

@Entry
@Component
struct SwiperExample {
  private swiperController: SwiperController = new SwiperController()
  private data: MyDataSource1 = new MyDataSource1([])
  @State widthLength: number = 0
  @State heightLength: number = 0
  @State currentIndex: number = 0

  aboutToAppear(): void {
    let list: number[] = []
    for (let i = 1; i <= 6; i++) {
      list.push(i);
    }
    this.data = new MyDataSource1(list)
  }

  build() {
    Column({ space: 5 }) {
      Stack({ alignContent: Alignment.Bottom }) {
        Swiper(this.swiperController) {
          LazyForEach(this.data, (item: string) => {
            Text(item.toString())
              .width('90%')
              .height(160)
              .backgroundColor(0xAFEEEE)
              .textAlign(TextAlign.Center)
              .fontSize(30)
          }, (item: string) => item)
        }
        .cachedCount(2)
        .index(0)
        .autoPlay(false)
        .interval(4000)
        .loop(true)
        .duration(1000)
        .itemSpace(0)
        .indicator(false)
        .curve(Curve.Linear)
        .onChange((index: number) => {
          console.info(index.toString())
          this.currentIndex = index
        })

        Row() {
          LazyForEach(this.data, (item: string, index: number) => {
            Column()
              .width(this.currentIndex === index ? 10 : 5)
              .height(5)
              .borderRadius(5)
              .margin(10) // 设置圆点间距
              .backgroundColor(this.currentIndex === index ? Color.Red : Color.Gray)
          }, (item: string) => item)
        }.margin({ bottom: 0 }) // 指示器距离底部距离
      }
    }.width('100%').margin({ top: 5 })
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
Swiperindicator后续会支持自定义
1963浏览 • 1回复 待解决
HarmonyOS Text组件设置间距
649浏览 • 0回复 待解决
Span组件设置间距间距
629浏览 • 1回复 待解决
HarmonyOS Refresh支持swiper
50浏览 • 1回复 待解决
litewearable支持swiper
2561浏览 • 1回复 待解决
Swiper是否支持组件复用
792浏览 • 1回复 待解决
HarmonyOS Swiper支持动态修改数据
538浏览 • 1回复 待解决
如何设置镜像语言左右间距
494浏览 • 1回复 待解决