chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用所學(xué)的鴻蒙知識(shí)做一個(gè)小應(yīng)用

OpenHarmony技術(shù)社區(qū) ? 來(lái)源:鴻蒙技術(shù)社區(qū) ? 作者:狼哥Army ? 2021-10-19 09:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

然而華為論壇鴻蒙版塊搞活動(dòng),做一個(gè)屬于自己的視頻應(yīng)用,說(shuō)真的,看到這個(gè)活動(dòng)我很開(kāi)心,又可以用所學(xué)的鴻蒙知識(shí)來(lái)做一個(gè)小應(yīng)用了!

看了小提示,都是 JS 組件來(lái)實(shí)現(xiàn)的,當(dāng)我看到分布式也可以用 JS 來(lái)寫(xiě)時(shí),當(dāng)時(shí)覺(jué)得 JS 也太強(qiáng)大了,因?yàn)橹皩?xiě)的 Demo 都是用 Java 來(lái)寫(xiě)分布式的。

本人工作也是從事 Java 后臺(tái)開(kāi)發(fā),對(duì)于 JS 前端知識(shí),也就是入門(mén)級(jí)水平,然后就在想是用 Java 來(lái)寫(xiě)這個(gè)視頻應(yīng)用,還是用 JS 來(lái)寫(xiě)呢。

通過(guò)看了 JS 參考 API 實(shí)例后,決定使用 JS 來(lái)寫(xiě),簡(jiǎn)單易懂,同時(shí)也希望現(xiàn)在還在觀望鴻蒙應(yīng)用開(kāi)發(fā)的前端開(kāi)發(fā)人員,不要怕自己不會(huì) Java 開(kāi)發(fā),而一直在觀望,沒(méi)有踏出第一步來(lái)寫(xiě) Demo。

我寫(xiě)的這個(gè)視頻應(yīng)用取名為“愛(ài)視頻 ,99% 是用 JS 前端知識(shí)完成的,只有 1% 的 Java 代碼是復(fù)制過(guò)來(lái)的,也就是動(dòng)態(tài)授權(quán)代碼,所以希望還在觀望的前端開(kāi)發(fā)者,就從這個(gè)愛(ài)視頻 APP 開(kāi)始你們的第一個(gè)鴻蒙應(yīng)用吧!

實(shí)現(xiàn)效果

創(chuàng)建工程

在這當(dāng)作你已經(jīng)安裝好最新版本 DevEco-Studio 開(kāi)發(fā)工具,點(diǎn)擊 File→New→New Project…彈出 Create HarmonyOS Project 窗口。

這里我選擇空白 JS 模板創(chuàng)建,寫(xiě)界面還是 JS 比較方便些,對(duì)于有一定前端知識(shí)的小伙伴來(lái)說(shuō)。

主界面開(kāi)發(fā)

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

  • 滑動(dòng)容器(swiper)

  • 視頻播放(video)

  • 可滑動(dòng)面板(panel)

  • 列表組件(list)

  • 圖片組件(image)

  • 文本組件(text)

  • 交互式組件(input)

  • 按鈕組件(button)

通過(guò)查看 JS API 參考文檔,就可以做出你喜歡的視頻應(yīng)用了。

先介紹簡(jiǎn)單的1% Java 代碼,如果之前做過(guò)分布式 Demo,直接復(fù)制過(guò)來(lái)就可以使用:

Java 代碼:
publicclassMainAbilityextendsAceAbility{
@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
//動(dòng)態(tài)判斷權(quán)限
if(verifySelfPermission("ohos.permission.DISTRIBUTED_DATASYNC")!=IBundleManager.PERMISSION_GRANTED){
//應(yīng)用未被授予權(quán)限
if(canRequestPermission("ohos.permission.DISTRIBUTED_DATASYNC")){
//是否可以申請(qǐng)彈框授權(quán)(首次申請(qǐng)或者用戶未選擇禁止且不再提示)
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挑戰(zhàn)賽第二期#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="請(qǐng)輸入評(píng)論內(nèi)容"onchange="changeValue"onenterkeyclick="enterkeyClick"style="margin-right:10px;">input>
<buttontype="capsule"value="關(guān)閉"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活動(dòng)門(mén)票進(jìn)行中'},
{title:'我期待HarmonyOS生態(tài)越來(lái)越完善'},
{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);
}
},

//流轉(zhuǎn)事件
tryContinueAbility:asyncfunction(){
//應(yīng)用進(jìn)行遷移
letresult=awaitFeatureAbility.continueAbility();
console.info("result:"+JSON.stringify(result));
},
onStartContinuation(){
//判斷當(dāng)前的狀態(tài)是不是適合遷移
console.info("onStartContinuation");
returntrue;
},
onCompleteContinuation(code){
//遷移操作完成,code返回結(jié)果
console.info("CompleteContinuation:code="+code);
app.terminate();

},
onSaveData(saveData){
//數(shù)據(jù)保存到savedData中進(jìn)行遷移。
vardata=this.continueAbilityData;
console.info("onSaveData:"+JSON.stringify(data));
Object.assign(saveData,data)
},
onRestoreData(restoreData){
console.info("onRestoreData:"+JSON.stringify(restoreData));
//收到遷移數(shù)據(jù),恢復(fù)。
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);
},

//評(píng)論事件
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 代碼(重要化妝技術(shù)):

.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;
}

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

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

總結(jié)

說(shuō)實(shí)存的,當(dāng)看到這個(gè)活動(dòng)時(shí)間才幾天時(shí),感覺(jué)時(shí)間不太夠用,要滑動(dòng)視頻,要評(píng)論功能,要分布式的,加上都是用空閑時(shí)間來(lái)做的,然而當(dāng)深入去理解相關(guān)組件用法后,發(fā)現(xiàn)應(yīng)該一天時(shí)間就可以了。

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

有空可以把重復(fù)代碼抽出來(lái),視頻源也可以放到服務(wù)器上,然后就可以更愉快的刷更多視頻了,源碼同步到 gitee 碼云,項(xiàng)目素材沒(méi)有上傳,自行添加。

源碼在這:

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

責(zé)任編輯:haq
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • APP
    APP
    +關(guān)注

    關(guān)注

    33

    文章

    1589

    瀏覽量

    75617
  • 鴻蒙系統(tǒng)
    +關(guān)注

    關(guān)注

    183

    文章

    2642

    瀏覽量

    69314
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2146

    瀏覽量

    35511

原文標(biāo)題:做一個(gè)鴻蒙版仿抖音APP!

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    開(kāi)源鴻蒙技術(shù)大會(huì)2025丨以智能化為主旋律,擘畫(huà)開(kāi)源鴻蒙一個(gè)五年發(fā)展技術(shù)藍(lán)圖

    ,與來(lái)自學(xué)術(shù)界和產(chǎn)業(yè)界的專家們共同回顧開(kāi)源鴻蒙五年來(lái)走過(guò)的非凡歷程,發(fā)布了開(kāi)源鴻蒙6.0版本,并展望面向未來(lái)的智能終端操作系統(tǒng)關(guān)鍵技術(shù)創(chuàng)新方向,呼吁與會(huì)專家以智能化發(fā)展為主旋律,共同擘畫(huà)開(kāi)源鴻蒙
    的頭像 發(fā)表于 11-10 18:13 ?1122次閱讀
    開(kāi)源<b class='flag-5'>鴻蒙</b>技術(shù)大會(huì)2025丨以智能化為主旋律,擘畫(huà)開(kāi)源<b class='flag-5'>鴻蒙</b>下<b class='flag-5'>一個(gè)</b>五年發(fā)展技術(shù)藍(lán)圖

    何用QT開(kāi)發(fā)個(gè)USB3.0上位機(jī)?

    何用QT開(kāi)發(fā)個(gè)USB3.0上位機(jī)
    發(fā)表于 05-21 06:54

    DevEco Studio AI輔助開(kāi)發(fā)工具兩大升級(jí)功能 鴻蒙應(yīng)用開(kāi)發(fā)效率再提升

    開(kāi)發(fā)者的喜愛(ài)。 應(yīng)廣大開(kāi)發(fā)者的需求建議,我們最近又對(duì)CodeGenie進(jìn)行了次升級(jí),不僅針對(duì)DeepSeek-R1新增支持鴻蒙知識(shí)RAG能力,還上線了代碼解釋功能,持續(xù)拓展AI在輔助鴻蒙
    發(fā)表于 04-18 14:43

    功德+1,用小安派-Eyes-S1做一個(gè)電子木魚(yú)

    2024積德累功,心想事成!接下來(lái)看看如何用小安派-Eyes-S1做一個(gè)電子木魚(yú)。01GUI-Guider頁(yè)面設(shè)計(jì)先新建個(gè)工程。直接進(jìn)入U(xiǎn)I設(shè)計(jì)界面,這里用到了兩
    的頭像 發(fā)表于 04-09 18:38 ?759次閱讀
    功德+1,用小安派-Eyes-S1<b class='flag-5'>做一個(gè)</b>電子木魚(yú)

    DevEco Studio 聯(lián)合小藝接入 DeepSeek,步驟更簡(jiǎn)單開(kāi)發(fā)鴻蒙更專業(yè)

    完成后,打開(kāi) DevEco Studio,創(chuàng)建個(gè)新的鴻蒙應(yīng)用項(xiàng)目,選擇適合的模板(如 Empty Ability)。 2、下載并安裝 CodeGenie 工具 如果你安裝的是官網(wǎng)最新的 DevEco
    發(fā)表于 03-13 15:11

    【「極速探索HarmonyOS NEXT 」閱讀體驗(yàn)】 本書(shū)開(kāi)啟了鴻蒙開(kāi)發(fā)的整個(gè)生態(tài)資源

    點(diǎn)時(shí)間,從百度云盤(pán)中下載到了下內(nèi)容,如圖: 這是書(shū)內(nèi)容相關(guān)的PPT文檔的目錄: 這是相關(guān)源代碼的目錄: 它們補(bǔ)充了書(shū)中所有的描述的內(nèi)容,使我對(duì)學(xué)習(xí)鴻蒙知識(shí)有了
    發(fā)表于 03-06 11:44

    【「極速探索HarmonyOS NEXT 」閱讀體驗(yàn)】 初印象:本純血鴻蒙應(yīng)用開(kāi)發(fā)入門(mén)的好書(shū)

    相關(guān)的知識(shí);接著介紹了鴻蒙的開(kāi)發(fā)語(yǔ)法,它選擇了ArkTS語(yǔ)法進(jìn)行了個(gè)簡(jiǎn)單的說(shuō)明,鴻蒙應(yīng)用程序的框架選擇了UIAbility介紹了它的基本概
    發(fā)表于 03-04 12:41

    鴻蒙之路:家國(guó)情懷下的堅(jiān)守與成長(zhǎng)

    大家好,我是《極速探索HarmonyOS NEXT 純血鴻蒙應(yīng)用開(kāi)發(fā)實(shí)踐》書(shū)的副主編, 、寫(xiě)書(shū)的初衷:填補(bǔ)知識(shí)空白,助力生態(tài)發(fā)展 在科技的廣袤星空中,操作系統(tǒng)猶如最璀璨的星辰之
    的頭像 發(fā)表于 02-24 15:18 ?811次閱讀
    <b class='flag-5'>鴻蒙</b>之路:家國(guó)情懷下的堅(jiān)守與成長(zhǎng)

    #新年新氣象,大家新年快樂(lè)!#AIGC入門(mén)及鴻蒙入門(mén)

    ,基于擴(kuò)散模型,能夠生成與給定文本描述相符的圖像。 鴻蒙系統(tǒng)入門(mén) 1.基礎(chǔ)知識(shí)鴻蒙系統(tǒng)(HarmonyOS)是華為推出的款分布式操作系統(tǒng),旨在實(shí)現(xiàn)跨設(shè)備、跨平臺(tái)的無(wú)縫協(xié)同體驗(yàn)。
    發(fā)表于 01-13 10:46

    AIGC入門(mén)及鴻蒙入門(mén)

    模型,能夠生成與給定文本描述相符的圖像。 鴻蒙系統(tǒng)入門(mén) 1. 基礎(chǔ)知識(shí)鴻蒙系統(tǒng)(HarmonyOS)是華為推出的款分布式操作系統(tǒng),旨在實(shí)現(xiàn)跨設(shè)備、跨平臺(tái)的無(wú)縫協(xié)同體驗(yàn)。
    發(fā)表于 01-13 10:32

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

    做一個(gè)12V/120A輸出的個(gè)電源模塊(模塊后會(huì)接電池),選用AMC1200來(lái)檢測(cè)輸出電壓做電壓反饋環(huán),同時(shí)也用來(lái)做一個(gè)防反接的保護(hù),故將AMC1200的原理圖大致如下,因?yàn)榭吹?/div>
    發(fā)表于 01-08 07:57

    用小安派 DSL做一個(gè)天氣站

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

    《HarmonyOS第課》煥新升級(jí),賦能開(kāi)發(fā)者快速掌握鴻蒙應(yīng)用開(kāi)發(fā)

    《HarmonyOS第課》煥新升級(jí),賦能開(kāi)發(fā)者快速掌握鴻蒙應(yīng)用開(kāi)發(fā) 隨著HarmonyOS NEXT發(fā)布,鴻蒙生態(tài)日益壯大,廣大開(kāi)發(fā)者對(duì)于系統(tǒng)化學(xué)習(xí)平臺(tái)和課程的需求愈發(fā)強(qiáng)烈。近日,華為精心打造
    發(fā)表于 01-02 14:24

    鴻蒙Flutter實(shí)戰(zhàn):14-現(xiàn)有Flutter 項(xiàng)目支持鴻蒙 II

    ,另外個(gè)為 ohos_app App 殼工程 進(jìn)入 package/apps/app 目錄, 創(chuàng)建 app 項(xiàng)目,該項(xiàng)目為個(gè) App 項(xiàng)目,用于各平臺(tái)(ios/android/ma
    發(fā)表于 12-26 14:59

    自己動(dòng)手做一個(gè)好玩的POV顯示設(shè)備

    “ 讀大學(xué)的時(shí)候就很喜歡這些開(kāi)腦洞的小玩意兒??吹?b class='flag-5'>一個(gè)印度小哥用ESP32 做了個(gè)高分辨率的 POV,而且開(kāi)源了全部的硬件和代碼,忍不住想分享給大家。”
    的頭像 發(fā)表于 12-25 15:15 ?2371次閱讀
    自己動(dòng)手<b class='flag-5'>做一個(gè)</b>好玩的POV顯示設(shè)備