“本学期学习了鸿蒙开发课程,想通过一个小项目检验一下自己所学,下面把该项目总结一下,为学习开发鸿蒙的小伙伴提供一些参考。
- import router from '@ohos.router'
- @Entry
- @Component
- struct Login {
- @State userName:string =''
- @State password:string = ''
- build() {
- Column() {
- Text('图书管理系统').margin({ top: 30 }).fontSize(40)
- Image($r('app.media.icon'))
- .height(100).width(100)
- .margin({ top: 100 })
- TextInput().width("80%").height(50).margin(10)
- .onChange((value) =>{
- this.userName =value
- })
- TextInput().width("80%").height(50).margin(10)
- .type(InputType.Password)
- .onChange((value01) =>{
- this.password =value01
- })
- Button("登录").onClick(() => {
- if(this.userName == '001' && this.password == '123'){
- router.pushUrl({ url: 'pages/Main' })
- }else{
- this.userName = ''
- this.password = ''
- }
- })
- .width("60%")
- .height(50)
- .margin(20)
- Button("注册").onClick(() => {
- router.pushUrl({ url: 'pages/Register' })
- })
- .width("60%")
- .height(50)
- .margin(20)
- }.height("100%")
- .width("100%")
- }
- }
复制代码 这行代码导入了OpenHarmony的路由模块,使得组件可以跳转到其他页面。
@Entry:表示这个组件是一个页面的入口点。
@Component:标志这个类是一个ArkUI组件。
@State userName: string = '':界说了一个名为userName的状态变量,用于存储用户名,初始值为空字符串。
@State password: string = '':界说了一个名为password的状态变量,用于存储密码,初始值为空字符串。
Column():创建一个垂直布局容器。
Text('图书管理系统'):显示文本“图书管理系统”。
Image($r('app.media.icon')):显示一个图片,图片资源通过$r函数引用。
TextInput():创建两个文本输入框,分别用于输入用户名和密码。用户名输入框绑定到userName状态,密码输入框绑定到password状态。
Button("登录"):创建一个登录按钮,点击时查抄用户名和密码是否正确(这里硬编码为'001'和'123'),假如正确则跳转到pages/Main页面,否则清空用户名和密码。
Button("注册"):创建一个注册按钮,点击时跳转到pages/Register页面。
这段代码实现了一个简朴的登录界面,用户可以输入用户名和密码进行登录,或者点击注册按钮跳转到注册页面。登录乐成后,会跳转到主页面。

这个页面就是应用的home界面
使用private swiperController: SwiperController = new SwiperController():创建了一个SwiperController实例,用于控制轮播图的举动。SwiperController是ArkUI提供的一个系统类,用于实现轮播图的切换等功能。
轮播图内包含三个Text组件,每个Text组件都设置了背景图片(通过$r函数引用资源),并显示了文本“轮播图1”、“轮播图2”和“轮播图3”。这些文本被居中显示,并设置了字体大小。
代码如下:
- @Entry
- @Component
- struct Main {
- @State content: string = ""
- //创建轮播实例对象--SwiperController系统函数
- private swiperController: SwiperController = new SwiperController()
- build() {
- Column() {
- Swiper(this.swiperController) {
- Text("轮播图1")
- .width('98%')
- .height(150)
- .backgroundImage($r('app.media.b1'))
- .backgroundImageSize({"width":"100%","height":"100%"})
- .textAlign(TextAlign.Center)
- .fontSize(30)
- Text("轮播图2")
- .width('98%')
- .height(150)
- .backgroundImage($r('app.media.b2'))
- .backgroundImageSize({"width":"100%","height":"100%"})
- .textAlign(TextAlign.Center)
- .fontSize(30)
- Text("轮播图3")
- .width('98%')
- .height(150)
- .backgroundImage($r('app.media.b3'))
- .backgroundImageSize({"width":"100%","height":"100%"})
- .textAlign(TextAlign.Center)
- .fontSize(30)
- }
- .loop(true)
- .autoPlay(true)
- .interval(3000)
- .indicatorStyle({
- size: 80,
- left: 300,
- color: Color.Red
- }).align(Alignment.Center)
- }.height('100%').width('100%').alignItems(HorizontalAlign.Center)
- }
- }
复制代码
这个界面可以进行简朴的动画介绍册本
@State videoSrc: Resource = $rawfile('test.mp4'):界说了一个状态变量videoSrc,用于存储视频文件的资源路径。这里使用了$rawfile函数来引用原始文件目录下的test.mp4视频文件。
@State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X:界说了一个状态变量curRate,用于控制视频的播放速度。初始值设置为正常速度(1倍速)。
@State showControls: boolean = true:界说了一个状态变量showControls,用于控制是否显示视频控制栏(如播放/暂停按钮、进度条等)。初始值设置为true,即显示控制栏。
@State isAutoPlay: boolean = false:界说了一个状态变量isAutoPlay,用于控制视频是否主动播放。初始值设置为false,即不主动播放。
视频播放组件支持多种事件回调,如开始播放、暂停、播放竣事、出错、预备完成、正在跳转、跳转完成和更新等,用户可以通过这些回调来执行相应的逻辑处理。
代码如下:
- @Entry
- @Component
- struct VideoCreateComponent {
- @State videoSrc: Resource = $rawfile('test.mp4') // 视频源
- @State previewUri: Resource = $r('app.media.pp1') // 预览图片
- @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X // 播放速度
- @State isAutoPlay: boolean = false // 不自动播放
- @State showControls: boolean = true // 显示控制栏
- controller: VideoController = new VideoController() // 视频控制器
- build() {
- Column() {
- Video({ // Video组件
- src: this.videoSrc,
- previewUri: this.previewUri,
- currentProgressRate: this.curRate,
- controller: this.controller
- }).width("100%").height("66%")
- .autoPlay(this.isAutoPlay)
- .controls(this.showControls)
- .onStart(() => {
- console.info('onStart')
- })
- .onPause(() => {
- console.info('onPause')
- })
- .onFinish(() => {
- console.info('onFinish')
- })
- .onError(() => {
- console.info('onFinish')
- })
- .onPrepared((e) => {
- console.info('onPrepared is ' + e.duration)
- })
- .onSeeking((e) => {
- console.info('onSeeking is ' + e.time)
- })
- .onSeeked((e) => {
- console.info('onSeeked is ' + e.time)
- })
- .onUpdate((e) => {
- console.info('onUpdate is ' + e.time)
- })
- Row() {
- Button('开始').onClick(() => {
- this.controller.start() // 开始播放
- }).margin(5)
- Button('暂停').onClick(() => {
- this.controller.pause() // 暂停播放
- }).margin(5)
- Button('停止').onClick(() => {
- this.controller.stop() // 结束播放
- }).margin(5)
- Button('跳到60秒').onClick(() => {
- this.controller.setCurrentTime(60, SeekMode.Accurate) // 精准跳转到视频的60s位置
- }).margin(5)
- }
- Row() {
- Button('0.75倍速').onClick(() => {
- this.curRate = PlaybackSpeed.Speed_Forward_0_75_X // 0.75倍速播放
- }).margin(5)
- Button('1倍数').onClick(() => {
- this.curRate = PlaybackSpeed.Speed_Forward_1_00_X // 原倍速播放
- }).margin(5)
- Button('2倍数').onClick(() => {
- this.curRate = PlaybackSpeed.Speed_Forward_2_00_X // 2倍速播放
- }).margin(5)
- }
- }.alignItems(HorizontalAlign.Center).padding({ left: 5, right: 5 })
- }
- }
复制代码 其他界面不再赘述,以下是一些界面截图:
   
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |