diff --git a/AppScope/app.json5 b/AppScope/app.json5 index 01a319a35b6ffd49e9a10653ceb43e59f0592547..e23acc49cde08c535c8d3a5e035f438e6da10530 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 743ea2469a6fcaf9d9c432856a96fca00fc2a557..006f3e86ee6a82ddfff0dff92f4dde50658e0710 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 2fb0b3d82f5c02cad6987448c02f39bf23d90b32..55ca2501955b4d355672d8448d686ff3063f446e 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 f2fd2f582b39cfffc9ee0241fb969d147ba7d81e..ce00eae072d594915ccaac1c91be32d7b1048203 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 3938ec64eb28e66a87ee4eb0a2f60ce49e370770..bae96e155b7e5527c3a00010b73ff0ffcde6459a 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 a4c2c63a4da695740c453073783b920f534cf381..88e4d3ac69935f92f57026b51afb362b5844bb16 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 c2d9fc05be2e5a1fcf3a441bba22cc1c16464b63..ff3938c48d666f90cbb0bda045ca63530ed7bafd 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 2ce5232ea66ce3c44e5af6033451d717c00fe577..27494f4121de414352c8bd67bb385fc5014884b8 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 c59557b4bfa97aab18abbfddeb9b2d4d94caa229..243bb14483f002e314b86e35863e03aa7588331b 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 be377d6e683c2872a6f4d809767f1a7d29487ec4..61091b55f22d196597d793834c26329248ff6836 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 952fb75aa6c24f7a3a3d11a1735e2461a1d787bb..0fceeef5ec911b338f8ab0cb38266044bf7fae58 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 852bb446b555b51e255b1ccb96367b68402307eb..dfc5ea39b1a5baf21707f7d8b64a0cbbdc4ac703 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": {} }