赞
踩
harmonyOS 系统提供了基础的video。下面就直接上代码
网络地址,就不用说明,只需要把地址换成网络地址即可
在resource 文件夹下的rawfile文件夹下 添加视频
Video({src:$rawfile("videoTest.mp4")})
.height("30%")
在resource 文件下的base——media 中添加进背景图
添加背景图属性
Column(){
Flex() {
Video({src:$rawfile("videoTest.mp4"),previewUri:$r('app.media.preview')})
.height("30%")
}
Flex(){
Text("sss")
}
}
@Component export struct VideoSlider { @Consume isOpacity: boolean; private controller: VideoController = new VideoController(); @Consume currentStringTime: string; @Consume currentTime: number; @Consume durationTime: number; @Consume durationStringTime: string; @Consume isPlay: boolean; @Consume flag: boolean; @Consume isLoading: boolean; @Consume progressVal: number; build() { Row({ space: MARGIN_FONT_SIZE.FIRST_MARGIN }) { Image(this.isPlay ? $r('app.media.ic_pause') : $r('app.media.ic_play')) .width(IMAGE_SIZE) .height(IMAGE_SIZE) .margin({ left: MARGIN_FONT_SIZE.FIRST_MARGIN }) .onClick(() => { this.iconOnclick(); }) Text(this.currentStringTime) .fontSize(MARGIN_FONT_SIZE.SECOND_MARGIN) .fontColor(Color.White) .margin({ left: MARGIN_FONT_SIZE.FIRST_MARGIN }) Slider({ value: this.currentTime, min: 0, max: this.durationTime, step: 1, style: SliderStyle.OutSet }) .blockColor($r('app.color.white')) .width(STRING_PERCENT.SLIDER_WITH) .trackColor(Color.Gray) .selectedColor($r("app.color.white")) .showSteps(true) .showTips(true) .trackThickness(this.isOpacity ? SMALL_TRACK_THICK_NESS : BIG_TRACK_THICK_NESS) .onChange((value: number, mode: SliderChangeMode) => { this.sliderOnchange(value, mode); }) Text(this.durationStringTime) .fontSize(MARGIN_FONT_SIZE.SECOND_MARGIN) .margin({ right: MARGIN_FONT_SIZE.FIRST_MARGIN }) .fontColor(Color.White) } .opacity(this.isOpacity ? DEFAULT_OPACITY : 1) .width(ALL_PERCENT) .alignItems(VerticalAlign.Center) .justifyContent(FlexAlign.Center) } /** * icon onclick callback */ iconOnclick() { if (this.isPlay === true) { this.controller.pause() this.isPlay = false; this.isOpacity = false; return; } if (this.flag === true) { this.controller.start(); this.isPlay = true; this.isOpacity = true; } else { this.isLoading = true; // The video loading is not complete. The loading action is displayed. let intervalLoading = setInterval(() => { if (this.progressVal >= STACK_STYLE.PROGRESS_TOTAL) { this.progressVal = 0; } else { this.progressVal += STACK_STYLE.PROGRESS_STEP; } }, STACK_STYLE.MILLI_SECONDS) // The scheduled task determines whether the video loading is complete. let intervalFlag = setInterval(() => { if (this.flag === true) { this.controller.start(); this.isPlay = true; this.isOpacity = true; this.isLoading = false; clearInterval(intervalFlag); clearInterval(intervalLoading); } }, STACK_STYLE.MILLI_SECONDS); } } /** * video slider component onchange callback */ sliderOnchange(value: number, mode: SliderChangeMode) { this.currentTime = Number.parseInt(value.toString()); this.controller.setCurrentTime(Number.parseInt(value.toString()), SeekMode.Accurate); if (mode === SliderChangeMode.Begin || mode === SliderChangeMode.Moving) { this.isOpacity = false; } if (mode === SliderChangeMode.End) { this.isOpacity = true; } } }
private controller : VideoController;
Flex() {
Video({src:$rawfile("videoTest.mp4"),previewUri:$r('app.media.preview')})
.height("30%")
.controls(false)
VideoSlider({ controller: this.controller })
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。