From fd2542027a392e6cb592ecb34dd186e5b4c62c74 Mon Sep 17 00:00:00 2001 From: liqi Date: Fri, 16 Aug 2024 10:18:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8DTitleIndicator=E6=8C=87?= =?UTF-8?q?=E7=A4=BA=E5=99=A8=E6=9C=AA=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liqi --- AppScope/app.json5 | 2 +- CHANGELOG.md | 3 + entry/oh-package.json5 | 2 +- .../src/main/ets/pages/TitlesSampleBottom.ets | 5 +- .../main/ets/pages/TitlesSampleDefault.ets | 5 +- .../ets/pages/TitlesSampleInitialPage.ets | 5 +- .../src/main/ets/pages/TitlesSampleStyled.ets | 5 +- .../main/ets/pages/TitlesSampleTriangle.ets | 5 +- library/oh-package.json5 | 2 +- .../main/ets/components/TitleIndicator.ets | 68 ++++++++++--------- .../inner_components/MeasurableText.ets | 4 +- oh-package.json5 | 2 +- 12 files changed, 61 insertions(+), 47 deletions(-) diff --git a/AppScope/app.json5 b/AppScope/app.json5 index 01a319a..e23acc4 100644 --- a/AppScope/app.json5 +++ b/AppScope/app.json5 @@ -3,7 +3,7 @@ "bundleName": "cn.openharmony.circleindicator", "vendor": "example", "versionCode": 1000002, - "versionName": "2.1.0-rc.0", + "versionName": "2.1.0-rc.1", "icon": "$media:app_icon", "label": "$string:app_name" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 743ea24..006f3e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## v2.1.0-rc.1 +- 修复TitleIndicator指示器滑动异常 +- ## v2.1.0-rc.0 - 适配ComponentV2装饰器 diff --git a/entry/oh-package.json5 b/entry/oh-package.json5 index 2fb0b3d..55ca250 100644 --- a/entry/oh-package.json5 +++ b/entry/oh-package.json5 @@ -10,7 +10,7 @@ }, "description": "example description", "main": "", - "version": "2.1.0-rc.0", + "version": "2.1.0-rc.1", "dependencies": { "@ohos/circleindicator": "file:../library" } diff --git a/entry/src/main/ets/pages/TitlesSampleBottom.ets b/entry/src/main/ets/pages/TitlesSampleBottom.ets index f2fd2f5..ce00eae 100644 --- a/entry/src/main/ets/pages/TitlesSampleBottom.ets +++ b/entry/src/main/ets/pages/TitlesSampleBottom.ets @@ -49,8 +49,9 @@ struct TitlesSampleBottom { } .width('100%') .height("100%") - .onChange((index)=>{ - this.index = index + .onContentWillChange((currentIndex: number, comingIndex: number)=>{ + this.index = comingIndex + return true }) .barHeight(0) .onTouch((event:TouchEvent) => { diff --git a/entry/src/main/ets/pages/TitlesSampleDefault.ets b/entry/src/main/ets/pages/TitlesSampleDefault.ets index 3938ec6..bae96e1 100644 --- a/entry/src/main/ets/pages/TitlesSampleDefault.ets +++ b/entry/src/main/ets/pages/TitlesSampleDefault.ets @@ -51,8 +51,9 @@ struct TitlesSampleDefault { } .width('100%') .height("100%") - .onChange((index)=>{ - this.index = index + .onContentWillChange((currentIndex: number, comingIndex: number)=>{ + this.index = comingIndex + return true }) .barHeight(0) .onTouch((event: TouchEvent) => { diff --git a/entry/src/main/ets/pages/TitlesSampleInitialPage.ets b/entry/src/main/ets/pages/TitlesSampleInitialPage.ets index a4c2c63..88e4d3a 100644 --- a/entry/src/main/ets/pages/TitlesSampleInitialPage.ets +++ b/entry/src/main/ets/pages/TitlesSampleInitialPage.ets @@ -50,8 +50,9 @@ struct TitlesSampleInitialPage { } .width('100%') .height("100%") - .onChange((index)=>{ - this.index = index + .onContentWillChange((currentIndex: number, comingIndex: number)=>{ + this.index = comingIndex + return true }) .barHeight(0) .onTouch((event: TouchEvent) => { diff --git a/entry/src/main/ets/pages/TitlesSampleStyled.ets b/entry/src/main/ets/pages/TitlesSampleStyled.ets index c2d9fc0..ff3938c 100644 --- a/entry/src/main/ets/pages/TitlesSampleStyled.ets +++ b/entry/src/main/ets/pages/TitlesSampleStyled.ets @@ -50,8 +50,9 @@ struct TitlesSampleStyled { } .width('100%') .height("100%") - .onChange((index)=>{ - this.index = index + .onContentWillChange((currentIndex: number, comingIndex: number)=>{ + this.index = comingIndex + return true }) .barHeight(0) .onTouch((event: TouchEvent) => { diff --git a/entry/src/main/ets/pages/TitlesSampleTriangle.ets b/entry/src/main/ets/pages/TitlesSampleTriangle.ets index 2ce5232..27494f4 100644 --- a/entry/src/main/ets/pages/TitlesSampleTriangle.ets +++ b/entry/src/main/ets/pages/TitlesSampleTriangle.ets @@ -50,8 +50,9 @@ struct TitlesSampleTriangle { } .width('100%') .height("100%") - .onChange((index)=>{ - this.index = index + .onContentWillChange((currentIndex: number, comingIndex: number)=>{ + this.index = comingIndex + return true }) .barHeight(0) .onTouch((event: TouchEvent) => { diff --git a/library/oh-package.json5 b/library/oh-package.json5 index c59557b..243bb14 100644 --- a/library/oh-package.json5 +++ b/library/oh-package.json5 @@ -13,7 +13,7 @@ "main": "index.ets", "repository": "https://gitee.com/openharmony-sig/CircleIndicator", "type": "module", - "version": "2.1.0-rc.0", + "version": "2.1.0-rc.1", "tags": [ "OpenHarmony", "indicator", diff --git a/library/src/main/ets/components/TitleIndicator.ets b/library/src/main/ets/components/TitleIndicator.ets index be377d6..61091b5 100644 --- a/library/src/main/ets/components/TitleIndicator.ets +++ b/library/src/main/ets/components/TitleIndicator.ets @@ -58,8 +58,7 @@ struct TitleIndicator { // originalOffset在(0.5, 1] 区间时, 原始页右页占屏幕中央部分, centerIndex == originalIndex - 1, centerIndex 范围 (-1, 0] // vpOffsets 存储每个title的水平位移 单位vp originalIndex: number = 0 - @Param originalOffset: number = 0 - @Event $originalOffset: (val: number) => void = (val: number) => {}; + @Local originalOffset: number = 0 centerOffset: number = 0 centerIndex: number = 0 @@ -165,7 +164,15 @@ struct TitleIndicator { aboutToAppear() { this.listBounds = Array.from({ length: this.titles.length }, (item: string, index: number) => new Bounds(0, 0, 0, 0)) - this.horizontalVpOffsets = Array.from({ length: this.titles.length }, (item: string, index: number) => 0) + this.horizontalVpOffsets = Array.from({ length: this.titles.length }, (item: string, index: number) => { + if (index == 0) { + return 0 + } else if(index == 1){ + return 189.84615384615384 + } else { + return 194.84615384615384 + } + }) this.originalIndex = this.itemIndex this.model.setOnPageTouchListener((event: TouchEvent, currentIndex: number) => { this.onIndicatorTouch(event, currentIndex); @@ -178,13 +185,13 @@ struct TitleIndicator { this.startX = (event.changedTouches[0].screenX) this.lastX2 = this.startX this.lastX = this.startX - this.$originalOffset(0) + this.originalOffset = 0 this.movedDuringTouch = false break case TouchType.Move: this.lastX2 = this.lastX this.lastX = (event.changedTouches[0].screenX) - this.$originalOffset(((this.lastX - this.startX) / this.model.getWidth())) + this.originalOffset = ((this.lastX - this.startX) / this.model.getWidth()) this.movedDuringTouch = true break case TouchType.Up: @@ -199,28 +206,27 @@ struct TitleIndicator { } else { let speed: number = currentX - this.lastX2 - if (speed > SPEED_THRESHOLD) { - nextIndex = Math.max(currentIndex - 1, 0) - } else if (speed < -SPEED_THRESHOLD) { - nextIndex = Math.min(currentIndex + 1, this.titles.length - 1) - } else {// 慢速滑动, 根据位移决定index - if (Math.abs(this.lastX - this.startX) > this.model.getWidth() / 3) { - if (this.lastX - this.startX < 0) { - nextIndex = Math.min(currentIndex + 1, this.titles.length -1) - } else { - nextIndex = Math.max(currentIndex-1, 0) - } - } else { - nextIndex = currentIndex - } - } + // if (speed > SPEED_THRESHOLD) { + // nextIndex = Math.max(currentIndex - 1, 0) + // } else if (speed < -SPEED_THRESHOLD) { + // nextIndex = Math.min(currentIndex + 1, this.titles.length - 1) + // } else {// 慢速滑动, 根据位移决定index + // if (Math.abs(this.lastX - this.startX) > this.model.getWidth() / 3) { + // if (this.lastX - this.startX < 0) { + // nextIndex = Math.min(currentIndex + 1, this.titles.length -1) + // } else { + // nextIndex = Math.max(currentIndex-1, 0) + // } + // } else { + // nextIndex = currentIndex + // } + // } } this.movedDuringTouch = false this.targetIndex = nextIndex this.timeoutId = setTimeout(() => { this.refreshOffsetForFling(this.originalIndex, this.originalOffset, nextIndex) - this.$originalOffset(0) - clearTimeout(this.timeoutId) + this.originalOffset = 0 }, FLING_INTERVAL) break } @@ -293,30 +299,30 @@ struct TitleIndicator { refreshOffsetForFling(originalIndex: number, originalOffset:number, nextIndex: number) { if (nextIndex === originalIndex) { if (Math.abs(originalOffset) <= FLING_OFFSET_PER_FRAME) { - this.$originalOffset(0) - } else { - this.$originalOffset(((Math.abs(this.originalOffset) - FLING_OFFSET_PER_FRAME) * Math.sign(this.originalOffset))) + this.originalOffset = 0 clearTimeout(this.timeoutId) + } else { + this.originalOffset = ((Math.abs(this.originalOffset) - FLING_OFFSET_PER_FRAME) * Math.sign(this.originalOffset)) this.timeoutId = setTimeout(() => { this.refreshOffsetForFling(originalIndex, this.originalOffset, nextIndex) }, FLING_INTERVAL) } } else if (nextIndex > originalIndex) {//显示下一页 说明往左滑动 offset 为负 if (originalOffset <= -(1 - FLING_OFFSET_PER_FRAME)) { this.originalIndex = nextIndex this.onIndexChange() - this.$originalOffset(0) - } else { - this.$originalOffset(this.originalOffset - FLING_OFFSET_PER_FRAME) + this.originalOffset = 0 clearTimeout(this.timeoutId) + } else { + this.originalOffset = this.originalOffset - FLING_OFFSET_PER_FRAME this.timeoutId = setTimeout(() => { this.refreshOffsetForFling(originalIndex, this.originalOffset, nextIndex) }, FLING_INTERVAL) } } else if (nextIndex < originalIndex) { if (originalOffset >= 1 - FLING_OFFSET_PER_FRAME) { this.originalIndex = nextIndex this.onIndexChange() - this.$originalOffset(0) - } else { - this.$originalOffset(this.originalOffset + FLING_OFFSET_PER_FRAME) + this.originalOffset = 0 clearTimeout(this.timeoutId) + } else { + this.originalOffset = this.originalOffset + FLING_OFFSET_PER_FRAME this.timeoutId = setTimeout(() => { this.refreshOffsetForFling(originalIndex, this.originalOffset, nextIndex) }, FLING_INTERVAL) } } diff --git a/library/src/main/ets/components/inner_components/MeasurableText.ets b/library/src/main/ets/components/inner_components/MeasurableText.ets index 952fb75..0fceeef 100644 --- a/library/src/main/ets/components/inner_components/MeasurableText.ets +++ b/library/src/main/ets/components/inner_components/MeasurableText.ets @@ -28,7 +28,7 @@ struct MeasurableText { text: string private measured: boolean = false; @Local - textWidth: number = 0; + textWidth: number = 50; @Local textHeight: number = 0 @@ -43,8 +43,8 @@ struct MeasurableText { Stack() { Scroll(this.scroller) { Row() { - Flex().width("100%").height("100%") Stack() { + Flex().width("100%").height("100%") Text(this.text) .fontSize(this.model.getFontSize()) .fontWeight(this.model.getFontWeight()) diff --git a/oh-package.json5 b/oh-package.json5 index 852bb44..dfc5ea3 100644 --- a/oh-package.json5 +++ b/oh-package.json5 @@ -12,6 +12,6 @@ }, "description": "example description", "main": "", - "version": "2.1.0-rc.0", + "version": "2.1.0-rc.1", "dependencies": {} } -- Gitee