关键字 | 说明 |
|---|---|
H:APP_SWIPER_SCROLL | 屏幕滑动事件(滑动期间手指不离开屏幕) |
H:APP_SWIPER_FLING | 屏幕抛滑事件(手指短暂接触屏幕触发滑动后离开屏幕) |
H:Create[Text][self:组件id] | 文本组件创建 |
H:FrameNode[Text][id:组件id]::RenderTask | 文本组件渲染绘制 |

在上方搜索框中搜索文本组件渲染任务执行的Trace点H:FrameNode[Text][id:3147]::RenderTask,发现是在图片滑动切换完成之后,可知是在图片切换完成后才更新文字,导致文字更新有延迟。

可将图片和文字作为整体,当左右滑动切换图片时,文字可随图片同步切换。
import { image } from '@kit.ImageKit';
class SwiperItemData {
content: string = ''; // 文本内容
image: image.PixelMap | ResourceStr | DrawableDescriptor = ''; // 图片
constructor(content: string, image: image.PixelMap | ResourceStr | DrawableDescriptor) {
this.content = content;
this.image = image;
}
}
class SwiperItemDataSource implements IDataSource {
private dataArray: SwiperItemData[] = [];
private listeners: DataChangeListener[] = [];
totalCount(): number {
return this.dataArray.length;
}
getData(index: number): SwiperItemData {
return this.dataArray[index];
}
addData(data: SwiperItemData): void {
this.dataArray.push(data);
this.notifyDataAdd(this.dataArray.length - 1);
}
registerDataChangeListener(listener: DataChangeListener): void {
this.listeners.push(listener);
}
unregisterDataChangeListener(listener: DataChangeListener): void {
let index = this.listeners.indexOf(listener);
if (index >= 0) {
this.listeners.splice(index, 1);
}
}
notifyDataAdd(index: number): void {
this.listeners.forEach(listener => {
listener.onDataAdd(index);
});
}
}
@Entry
@Component
struct ImageTextDemoPage {
private swiperController: SwiperController = new SwiperController();
private swiperItemDataSource: SwiperItemDataSource = new SwiperItemDataSource();
initPageData(): void {
// 测试需要替换成可引用到的资源
let data1 = new SwiperItemData('页面1', $r('app.media.picture1'));
let data2 = new SwiperItemData('页面2', $r('app.media.picture2'));
let data3 = new SwiperItemData('页面3', $r('app.media.picture3'));
let data4 = new SwiperItemData('页面4', $r('app.media.picture4'));
let data5 = new SwiperItemData('页面5', $r('app.media.picture5'));
let data6 = new SwiperItemData('页面6', $r('app.media.picture6'));
this.swiperItemDataSource.addData(data1);
this.swiperItemDataSource.addData(data2);
this.swiperItemDataSource.addData(data3);
this.swiperItemDataSource.addData(data4);
this.swiperItemDataSource.addData(data5);
this.swiperItemDataSource.addData(data6);
}
aboutToAppear(): void {
this.initPageData();
}
@Builder
itemBuilder(data: SwiperItemData) {
Stack() {
Image(data.image) // 图片
.width('100%')
.height('100%')
Text(data.content) // 文本内容
.fontSize(25)
.fontColor(Color.White)
}
}
build() {
Swiper(this.swiperController) {
LazyForEach(this.swiperItemDataSource, (item: SwiperItemData) => {
this.itemBuilder(item);
})
}
.autoPlay(false)
.cachedCount(2)
.loop(false)
.indicator(false)
.height('100%')
.width('100%')
}
}