在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用所學的鴻蒙知識做一個小應用

OpenHarmony技術社區 ? 來源:鴻蒙技術社區 ? 作者:狼哥Army ? 2021-10-19 09:23 ? 次閱讀

今時今日,不管是大人,還是小孩,都喜歡刷視頻,生活中刷視頻的 APP 也多得是,如:抖音,快手,視頻號,今日頭條,火山…數也不數不清了。

然而華為論壇鴻蒙版塊搞活動,做一個屬于自己的視頻應用,說真的,看到這個活動我很開心,又可以用所學的鴻蒙知識來做一個小應用了!

看了小提示,都是 JS 組件來實現的,當我看到分布式也可以用 JS 來寫時,當時覺得 JS 也太強大了,因為之前寫的 Demo 都是用 Java 來寫分布式的。

本人工作也是從事 Java 后臺開發,對于 JS 前端知識,也就是入門級水平,然后就在想是用 Java 來寫這個視頻應用,還是用 JS 來寫呢。

通過看了 JS 參考 API 實例后,決定使用 JS 來寫,簡單易懂,同時也希望現在還在觀望鴻蒙應用開發的前端開發人員,不要怕自己不會 Java 開發,而一直在觀望,沒有踏出第一步來寫 Demo。

我寫的這個視頻應用取名為“愛視頻 ,99% 是用 JS 前端知識完成的,只有 1% 的 Java 代碼是復制過來的,也就是動態授權代碼,所以希望還在觀望的前端開發者,就從這個愛視頻 APP 開始你們的第一個鴻蒙應用吧!

實現效果

創建工程

在這當作你已經安裝好最新版本 DevEco-Studio 開發工具,點擊 File→New→New Project…彈出 Create HarmonyOS Project 窗口。

這里我選擇空白 JS 模板創建,寫界面還是 JS 比較方便些,對于有一定前端知識的小伙伴來說。

主界面開發

在展示源代碼之前,先介紹一下使用到了 JS 哪些組件:

  • 滑動容器(swiper)

  • 視頻播放(video)

  • 可滑動面板(panel)

  • 列表組件(list)

  • 圖片組件(image)

  • 文本組件(text)

  • 交互式組件(input)

  • 按鈕組件(button)

通過查看 JS API 參考文檔,就可以做出你喜歡的視頻應用了。

先介紹簡單的1% Java 代碼,如果之前做過分布式 Demo,直接復制過來就可以使用:

Java 代碼:
publicclassMainAbilityextendsAceAbility{
@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
//動態判斷權限
if(verifySelfPermission("ohos.permission.DISTRIBUTED_DATASYNC")!=IBundleManager.PERMISSION_GRANTED){
//應用未被授予權限
if(canRequestPermission("ohos.permission.DISTRIBUTED_DATASYNC")){
//是否可以申請彈框授權(首次申請或者用戶未選擇禁止且不再提示)
requestPermissionsFromUser(newString[]{"ohos.permission.DISTRIBUTED_DATASYNC"},0);
}
}
}

@Override
publicvoidonStop(){
super.onStop();
}
}

HML 代碼(重要界面布局文件):

<divclass="container">
<swiperclass="swiper"id="swiper"index="{{continueAbilityData.currentIndex}}"indicator="false"loop="true"digital="false"vertical="true"onchange="changeSwiper">
<divclass="swiperContent">
<videoid='videoOne'src='{{continueAbilityData.videoList[0]}}'muted='false'autoplay='true'ontimeupdate='timeupdateCallback'style="object-fit:fill;width:100%;height:100%;"controls="false"onclick="change_start_pause_one"loop='true'starttime='{{ontinueAbilityData.timeupdatetime}}'>video>
div>
<divclass="swiperContent">
<videoid='videoTwo'src='{{continueAbilityData.videoList[1]}}'muted='false'autoplay='false'ontimeupdate='timeupdateCallback'style="object-fit:fill;width:100%;height:100%;"controls="false"onclick="change_start_pause_two"loop='true'starttime='{{ontinueAbilityData.timeupdatetime}}'>video>
div>
<divclass="swiperContent">
<videoid='videoThree'src='{{continueAbilityData.videoList[2]}}'muted='false'autoplay='false'ontimeupdate='timeupdateCallback'style="object-fit:fill;width:100%;height:100%;"controls="false"onclick="change_start_pause_three"loop='true'starttime='{{continueAbilityData.timeupdatetime}}'>video>
div>
swiper>
<divclass="btn-footer">
<imageclass="comment-iconicon"src="/common/army_icon.jpg">image>
<textclass="footer-label">#HarmonyOS挑戰賽第二期#text>
<imageclass="comment-icon"src="/common/share.png"onclick="tryContinueAbility">image>
<imageclass="comment-icon"src="/common/bxs-message.png"onclick="showPanel">image>
div>
<panelid="simplepanel"type="foldable"mode="half"miniheight="400px">
<divclass="panel-div">
<listclass="todo-wrapper">
<list-itemfor="{{continueAbilityData.todolist}}"class="todo-item">
<imageclass="todo-icon"src="/common/avatar04.png">image>
<textclass="todo-title">{{$item.title}}text>
list-item>
list>
<divclass="inner-btn">
<inputid="input"class="input"type="text"value="{{continueAbilityData.comment}}"maxlength="20"enterkeytype="send"placeholder="請輸入評論內容"onchange="changeValue"onenterkeyclick="enterkeyClick"style="margin-right:10px;">input>
<buttontype="capsule"value="關閉"onclick="closePanel">button>
div>
div>
panel>
div>

JS 代碼(重要邏輯代碼,各組件事件):

//@ts-nocheck
importappfrom'@system.app';
exportdefault{
data:{
img:"resources/media/pic_tv.png",
continueAbilityData:{
currentIndex:0,
videoList:[
"/common/000001.mp4",
"/common/000002.mp4",
"/common/000003.mp4"
],
timeupdatetime:2,
isStart:true,
todolist:[
{title:'HDC2021活動門票進行中'},
{title:'我期待HarmonyOS生態越來越完善'},
{title:'HarmonyOS你值得擁有'}],
comment:''
}
},
onInit(){
},
changeSwiper(e){
console.info("onRestoreData:changeSwiper");
this.switchPlay(e.index);
},
switchPlay(index){
console.info("onRestoreData:onShow<>"+index);
this.continueAbilityData.currentIndex=index;
if(index==0){
this.$element('videoOne').start();
this.$element('videoTwo').pause();
this.$element('videoThree').pause();
console.info("onRestoreData:videoOne<>start"+this.$element('videoOne').starttime);
}elseif(index==1){
this.$element('videoOne').pause();
this.$element('videoTwo').start();
this.$element('videoThree').pause();
console.info("onRestoreData:videoTwo<>start"+this.$element('videoTwo').starttime);
}elseif(index==2){
this.$element('videoOne').pause();
this.$element('videoTwo').pause();
this.$element('videoThree').start();
console.info("onRestoreData:videoThree<>start"+this.$element('videoThree').starttime);
}
},

//流轉事件
tryContinueAbility:asyncfunction(){
//應用進行遷移
letresult=awaitFeatureAbility.continueAbility();
console.info("result:"+JSON.stringify(result));
},
onStartContinuation(){
//判斷當前的狀態是不是適合遷移
console.info("onStartContinuation");
returntrue;
},
onCompleteContinuation(code){
//遷移操作完成,code返回結果
console.info("CompleteContinuation:code="+code);
app.terminate();

},
onSaveData(saveData){
//數據保存到savedData中進行遷移。
vardata=this.continueAbilityData;
console.info("onSaveData:"+JSON.stringify(data));
Object.assign(saveData,data)
},
onRestoreData(restoreData){
console.info("onRestoreData:"+JSON.stringify(restoreData));
//收到遷移數據,恢復。
this.continueAbilityData=restoreData;

varcurrentIndex=this.continueAbilityData.currentIndex;
varcurrentTime=this.continueAbilityData.timeupdatetime;

this.$element('videoOne').pause();
this.$element('videoTwo').pause();
this.$element('videoThree').pause();

this.$element('videoOne').starttime=currentTime;
this.$element('videoTwo').starttime=currentTime;
this.$element('videoThree').starttime=currentTime;

this.switchPlay(currentIndex);
},

//評論事件
showPanel(){
this.$element('simplepanel').show()
},
closePanel(){
this.$element('simplepanel').close()
},
changeValue(e){
this.continueAbilityData.comment=e.value;
},
enterkeyClick(e){
this.continueAbilityData.todolist.push({title:this.continueAbilityData.comment});
this.continueAbilityData.comment="";
},
timeupdateCallback:function(e){this.continueAbilityData.timeupdatetime=e.currenttime;},
change_start_pause_one:function(){
if(this.continueAbilityData.isStart){
this.$element('videoOne').pause();
this.continueAbilityData.isStart=false;
}else{
this.$element('videoOne').start();
this.continueAbilityData.isStart=true;
}
},
change_start_pause_two:function(){
if(this.continueAbilityData.isStart){
this.$element('videoTwo').pause();
this.continueAbilityData.isStart=false;
}else{
this.$element('videoTwo').start();
this.continueAbilityData.isStart=true;
}
},
change_start_pause_three:function(){
if(this.continueAbilityData.isStart){
this.$element('videoThree').pause();
this.continueAbilityData.isStart=false;
}else{
this.$element('videoThree').start();
this.continueAbilityData.isStart=true;
}
}
}

CSS 代碼(重要化妝技術):

.container{
width:100%;
height:100%;
flex-direction:column;
}

.img{
object-fit:cover;
background-color:#808080;
}

.swiper{
flex-direction:column;
align-content:center;
align-items:center;
width:100%;
height:100%;
background-color:black;
}
.swiperContent{
height:100%;
justify-content:center;
background-color:black;
}

.btn-footer{
height:60px;
line-height:60px;
width:100%;
background-color:black;
flex-direction:row;
}
.footer-label{
font-size:16px;
color:white;
padding-top:0px;
flex-weight:1;
line-height:20px;
}
.comment-icon{
width:32px;
height:32px;
margin:8px;
}
.icon{
border-radius:16px;
}

.panel-div{
flex-direction:column;
align-content:center;
align-items:center;
width:100%;
height:100%;
}
.inner-btn{
height:70px;
padding:10px;
}
.todo-wrapper{
width:100%;
height:100%;
}
.todo-item{
width:100%;
height:30px;
padding-left:10px;
padding-right:10px;
}
.todo-icon{
width:16px;
height:16px;
margin-top:10px;
margin-right:10px;
}
.todo-title{
width:100%;
height:100%;
text-align:left;
font-size:14fp;
}

代碼就寫到此了,不要忘記了 config.json 文件的權限配置哦,在 module 下添加:

"reqPermissions":[
{
"name":"ohos.permission.DISTRIBUTED_DATASYNC"
}
]

總結

說實存的,當看到這個活動時間才幾天時,感覺時間不太夠用,要滑動視頻,要評論功能,要分布式的,加上都是用空閑時間來做的,然而當深入去理解相關組件用法后,發現應該一天時間就可以了。

有興趣的小伙伴可以下載源碼查看,項目代碼寫得還不算靚仔,很多為了實現效果,都是 Hardcode 的。

有空可以把重復代碼抽出來,視頻源也可以放到服務器上,然后就可以更愉快的刷更多視頻了,源碼同步到 gitee 碼云,項目素材沒有上傳,自行添加。

源碼在這:

https://gitee.com/army16/qin-hong-jun-video

責任編輯:haq
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • APP
    APP
    +關注

    關注

    33

    文章

    1577

    瀏覽量

    72786
  • 鴻蒙系統
    +關注

    關注

    183

    文章

    2638

    瀏覽量

    66716
  • HarmonyOS
    +關注

    關注

    79

    文章

    1982

    瀏覽量

    30579

原文標題:做一個鴻蒙版仿抖音APP!

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    #新年新氣象,大家新年快樂!#AIGC入門及鴻蒙入門

    ,基于擴散模型,能夠生成與給定文本描述相符的圖像。 鴻蒙系統入門 1.基礎知識鴻蒙系統(HarmonyOS)是華為推出的款分布式操作系統,旨在實現跨設備、跨平臺的無縫協同體驗。
    發表于 01-13 10:46

    AIGC入門及鴻蒙入門

    模型,能夠生成與給定文本描述相符的圖像。 鴻蒙系統入門 1. 基礎知識鴻蒙系統(HarmonyOS)是華為推出的款分布式操作系統,旨在實現跨設備、跨平臺的無縫協同體驗。
    發表于 01-13 10:32

    如何做一個12V/120A輸出的電源模塊?

    做一個12V/120A輸出的電源模塊(模塊后會接電池),選用AMC1200來檢測輸出電壓做電壓反饋環,同時也用來做一個防反接的保護,故將AMC1200的原理圖大致如下,因為看的
    發表于 01-08 07:57

    用小安派 DSL做一個天氣站

    2.4 寸 320 *240 分辨率屏幕,外接 sht30 溫濕度傳感器,做一個天氣站。 01、主要功能 時間顯示(已完成) 天氣顯示(已完成) 溫濕度顯示(已完成) wifi 密碼保
    的頭像 發表于 01-06 16:44 ?181次閱讀
    用小安派 DSL<b class='flag-5'>做一個</b>天氣站

    如何使用合宙的DTU+業務云平臺,做一個溫濕度傳感器數據采集項目?

    使用合宙的DTU+業務云平臺,做一個溫濕度傳感器數據采集項目,超詳細教程。
    的頭像 發表于 09-18 11:11 ?517次閱讀
    如何使用合宙的DTU+業務云平臺,<b class='flag-5'>做一個</b>溫濕度傳感器數據采集項目?

    何用TLC2272C做一個耳機的功放?

    需要用TLC2272C做一個耳機的功放,請提供下典型應用的例子,謝謝
    發表于 09-06 06:37

    何用OPA615做一個脈沖信號的峰值保持電路?

    求助 ,想用OPA615做一個脈沖信號的峰值保持電路 有沒有電路圖什么的或者相關的資料
    發表于 08-27 07:50

    何用運放設計高頻的壓控電流源?

    請教下TI的各位工程師,如何用運放設計高頻的壓控電流源?要求輸出電流0-500mA,負載5-10Ω,頻率1MHz-10MHz。
    發表于 08-14 07:06

    鴻蒙開發就業前景到底怎么樣?

    有幫助,我想邀請大家幫我三小忙: 點贊,轉發,有你們的 『點贊和評論』,才是我創造的動力。 關注小編,同時可以期待后續文章ing?,不定期分享原創知識。 更多鴻蒙最新技術知識點,請關
    發表于 05-09 17:37

    36歲了還有必要轉行鴻蒙開發嗎?

    的是 5G 時代,那個萬物都能互聯的時代。 鴻蒙的市場需求有多大? 目前很多企業都紛紛開始設置鴻蒙的崗位,想提前步布局鴻蒙。根據些招聘網
    發表于 05-09 17:01

    鴻蒙的1萬理由,北京中關村現大幅鴻蒙海報

    。學鴻蒙,可以收獲新的技能、更高的薪酬、還有更多榮譽。 據悉,目前已有超過4000APP啟動了鴻蒙原生應用開發,已有23家985高校、46家211高校已開設或即將開設HarmonyOS相關課程
    發表于 05-08 20:31

    實錘!騰訊終于擁抱鴻蒙生態,微信鴻蒙原生版本即將上線

    一個,也是唯手機操作系統有多么的喜歡。 最后 如果大家覺得這篇內容對學習鴻蒙開發有幫助,我想邀請大家幫我三
    發表于 04-30 21:14

    騰訊突然宣布,微信鴻蒙版要來了!

    、網易游戲、云閃付、中國移動、建設銀行….. 等大波知名APP已加入鴻蒙原生應用開發,還有近 1000 應用正在溝通中。 不過,有不少細心網友發現,官宣適配鴻蒙的眾多APP中,遲遲
    發表于 04-30 19:34

    鴻蒙OS崛起,鴻蒙應用開發工程師成市場新寵

    應用的形態也在發生著翻天覆地的變化。作為全球領先的移動操作系統和智能終端制造商,華為公司自主研發的鴻蒙OS應運而生,致力于構建的分布式操作系統,為各行各業的應用開發帶來全新的可
    發表于 04-29 17:32

    做一個TC23X單片機的Bootloader程序需要準備哪些方面的知識

    各位,問下,上位機用現成的,做一個TC23X單片機的Bootloader程序需要準備哪些方面的知識?需要看數據手冊的哪些章節?還有能否給
    發表于 02-18 08:33
    主站蜘蛛池模板: 综合欧美一区二区三区 | 天天爽夜夜爽天天做夜夜做 | 男人天堂色男人 | 九月丁香婷婷亚洲综合色 | 精品亚洲国产国拍 | 日操| 国产人成午夜免视频网站 | 天天操夜夜艹 | 日本不卡免费高清一级视频 | 国产色女人 | 自偷自拍亚洲欧美清纯唯美 | 色婷婷欧美 | 亚洲 欧美 丝袜 制服 在线 | 国产网站免费 | 天天爱天天干天天操 | 大杳蕉伊人狼人久久一本线 | 亚洲综合日韩欧美一区二区三 | 四虎tv在线观看884aa | 日本免费a级片 | 插插插天天 | 天天爽夜夜爽人人爽一区二区 | 国产一级特黄aaaa大片野外 | 欧美干色| 久久国产精品免费网站 | 999毛片免费观看 | tube69日本 | 欧美视频精品一区二区三区 | 色www亚洲国产张柏芝 | 伊人网址| 亚洲福利视频网址 | 国产女人在线观看 | 97福利| 天天av天天翘天天综合网 | 中国一级做a爰片久久毛片 中韩日欧美电影免费看 | 四虎影院官网 | 国产精品美女免费视频大全 | 久久久久久久久综合影视网 | 殴美一级| 一级大片免费看 | 午夜在线免费视频 | 青草视频网站在线观看 |