国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

鴻蒙系統中用Java UI開發分布式仿抖音應用

OpenHarmony技術社區 ? 來源:鴻蒙技術社區 ? 作者:開鴻HOS小鴻 ? 2021-11-01 14:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文使用 Java UI 開發分布式仿抖音應用,上下滑動切換視頻,評論功能,設備遷移功能:記錄播放的視頻頁和進度、評論數據。

效果演示

①上下滑動切換視頻、點擊遷移圖標,彈框選擇在線的設備,完成視頻數據的遷移。

點擊評論圖標查看評論,編輯評論內容并發送。點擊遷移圖標,彈框選擇在線的設備,完成評論數據的遷移。

項目結構

如下圖:

d2044b64-3ac4-11ec-82a9-dac502259ad0.png

主要代碼

①上下滑動頁面

頁面切換用到系統組件PageSlider:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-component-pageslider-0000001091933258

默認左右切換,設置為上下方向:setOrientation(Component.VERTICAL);

importohos.aafwk.ability.AbilitySlice;
importohos.aafwk.content.Intent;
importohos.agp.components.*;

importjava.util.ArrayList;
importjava.util.List;

publicclassMainAbilitySliceextendsAbilitySlice{
@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//查找滑動頁面組件
PageSliderpageSlider=(PageSlider)findComponentById(ResourceTable.Id_pageSlider);
//設置滑動方向為上下滑動
pageSlider.setOrientation(Component.VERTICAL);
//集合測試數據
ListlistData=newArrayList<>();
listData.add("第一頁");
listData.add("第二頁");
listData.add("第三頁");

//設置頁面適配器
pageSlider.setProvider(newPageSliderProvider(){
/**
*獲取當前適配器中可用視圖的數量
*/
@Override
publicintgetCount(){
returnlistData.size();
}
/**
*創建頁面
*/
@Override
publicObjectcreatePageInContainer(ComponentContainercontainer,intposition){
//查找布局
Componentcomponent=LayoutScatter.getInstance(getContext()).parse(ResourceTable.Layout_item_page,null,false);
TexttextContent=(Text)component.findComponentById(ResourceTable.Id_text_item_page_content);
//設置數據
textContent.setText(listData.get(position));
//添加到容器中
container.addComponent(component);
returncomponent;
}
/**
*銷毀頁面
*/
@Override
publicvoiddestroyPageFromContainer(ComponentContainercontainer,intposition,Objectobject){
//從容器中移除
container.removeComponent((Component)object);
}
/**
*檢查頁面是否與對象匹配
*/
@Override
publicbooleanisPageMatchToObject(Componentpage,Objectobject){
returntrue;
}
});

//添加頁面改變監聽器
pageSlider.addPageChangedListener(newPageSlider.PageChangedListener(){
/**
*頁面滑動時調用
*/
@Override
publicvoidonPageSliding(intitemPos,floatitemPosOffset,intitemPosOffsetPixels){}
/**
*當頁面滑動狀態改變時調用
*/
@Override
publicvoidonPageSlideStateChanged(intstate){}
/**
*選擇新頁面時回調
*/
@Override
publicvoidonPageChosen(intitemPos){
//在此方法下,切換頁面獲取當前頁面的視頻源,進行播放
Stringdata=listData.get(itemPos);
}
});
}
}

②播放視頻

視頻播放使用Player:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/media-video-player-0000000000044178

視頻畫面窗口顯示使用SurfaceProvider:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/faq-media-0000001124842486#section0235506211
importohos.aafwk.ability.AbilitySlice;
importohos.aafwk.content.Intent;
importohos.agp.components.surfaceprovider.SurfaceProvider;
importohos.agp.graphics.SurfaceOps;
importohos.global.resource.RawFileDescriptor;
importohos.media.common.Source;
importohos.media.player.Player;

importjava.io.IOException;

publicclassMainAbilitySliceextendsAbilitySlice{
//視頻路徑
privatefinalStringvideoPath="resources/rawfile/HarmonyOS.mp4";
//播放器
privatePlayermPlayer;

@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//初始化播放器
mPlayer=newPlayer(getContext());
//查找視頻窗口組件
SurfaceProvidersurfaceProvider=(SurfaceProvider)findComponentById(ResourceTable.Id_surfaceProvider);
//設置視頻窗口在頂層
surfaceProvider.pinToZTop(true);
//設置視頻窗口操作監聽
if(surfaceProvider.getSurfaceOps().isPresent()){
surfaceProvider.getSurfaceOps().get().addCallback(newSurfaceOps.Callback(){
/**
*創建視頻窗口
*/
@Override
publicvoidsurfaceCreated(SurfaceOpsholder){
try{
RawFileDescriptorfileDescriptor=getResourceManager().getRawFileEntry(videoPath).openRawFileDescriptor();
Sourcesource=newSource(fileDescriptor.getFileDescriptor(),
fileDescriptor.getStartPosition(),
fileDescriptor.getFileSize()
);
//設置媒體文件
mPlayer.setSource(source);
//設置播放窗口
mPlayer.setVideoSurface(holder.getSurface());
//循環播放
mPlayer.enableSingleLooping(true);
//準備播放環境并緩沖媒體數據
mPlayer.prepare();
//開始播放
mPlayer.play();
}catch(IOExceptione){
e.printStackTrace();
}

}
/**
*視頻窗口改變
*/
@Override
publicvoidsurfaceChanged(SurfaceOpsholder,intformat,intwidth,intheight){}
/**
*視頻窗口銷毀
*/
@Override
publicvoidsurfaceDestroyed(SurfaceOpsholder){}
});
}
}

@Override
protectedvoidonStop(){
super.onStop();
//頁面銷毀,釋放播放器
if(mPlayer!=null){
mPlayer.stop();
mPlayer.release();
}
}
}

③跨設備遷移示例

跨設備遷移使用IAbilityContinuation 接口

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-page-cross-device-0000001051072880

在 entry 下的 config.json 配置權限:

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

實現 IAbilityContinuation 接口,說明:一個應用可能包含多個 Page,僅需要在支持遷移的 Page 中通過以下方法實現 IAbilityContinuation 接口。

同時,此 Page 所包含的所有 AbilitySlice 也需要實現此接口。

importohos.aafwk.ability.AbilitySlice;
importohos.aafwk.ability.IAbilityContinuation;
importohos.aafwk.content.Intent;
importohos.aafwk.content.IntentParams;
importohos.agp.components.Button;
importohos.agp.components.Text;
importohos.bundle.IBundleManager;
importohos.distributedschedule.interwork.DeviceInfo;
importohos.distributedschedule.interwork.DeviceManager;

importjava.util.List;

publicclassMainAbilitySliceextendsAbilitySliceimplementsIAbilityContinuation{
privateStringdata="";
StringPERMISSION="ohos.permission.DISTRIBUTED_DATASYNC";

@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//申請權限
if(verifySelfPermission(PERMISSION)!=IBundleManager.PERMISSION_GRANTED){
requestPermissionsFromUser(newString[]{PERMISSION},0);
}
Buttonbutton=(Button)findComponentById(ResourceTable.Id_button);
Texttext=(Text)findComponentById(ResourceTable.Id_text);

//點擊遷移
button.setClickedListener(component->{
//查詢分布式網絡中所有在線設備(不包括本地設備)的信息。
ListdeviceList=DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);
if(deviceList.size()>0){
//啟動遷移,指定的設備ID
continueAbility(deviceList.get(0).getDeviceId());
}
});
//顯示遷移的數據
text.setText("遷移的數據:"+data);
}
/**
*啟動遷移時首次調用此方法
*@return是否進行遷移
*/
@Override
publicbooleanonStartContinuation(){
returntrue;
}
/**
*遷移時存入數據
*/
@Override
publicbooleanonSaveData(IntentParamsintentParams){
intentParams.setParam("data","測試數據");
returntrue;
}
/**
*獲取遷移存入的數據,在生命周期的onStart之前執行
*/
@Override
publicbooleanonRestoreData(IntentParamsintentParams){
data=(String)intentParams.getParam("data");
returntrue;
}
/**
*遷移完成
*/
@Override
publicvoidonCompleteContinuation(inti){}
}

根據上面的核心代碼示例,了解實現原理,接下來便可以結合實際需求完善功能了。

責任編輯:haq

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

    關注

    20

    文章

    3001

    瀏覽量

    116422
  • 鴻蒙系統
    +關注

    關注

    183

    文章

    2642

    瀏覽量

    69838
  • HarmonyOS
    +關注

    關注

    80

    文章

    2153

    瀏覽量

    36041

原文標題:開發一個鴻蒙版“抖音”,So easy!

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    SC-3568HA:解鎖鴻蒙全權限API與分布式能力的工業控制平臺

    傳統嵌入式開發面臨硬件碎片化、高權限功能缺失、分布式協同復雜及自動化測試不足等痛點。SC-3568HA開發板基于鴻蒙系統,通過統一內核抽象層
    的頭像 發表于 12-18 11:27 ?7181次閱讀
    SC-3568HA:解鎖<b class='flag-5'>鴻蒙</b>全權限API與<b class='flag-5'>分布式</b>能力的工業控制平臺

    【節能學院】Acrel-1000DP分布式光伏監控系統在奉賢平高食品 4.4MW 分布式光伏中應用

    摘要:在“雙碳”和新型電力系統建設背景下,分布式光伏接入比例不斷提高,對配電網電壓、調度運行及調峰等環節造成強烈沖擊。本文設計包含平臺層、設備層二層架構體系的分布式光伏管控平臺,以及小容量工商業
    的頭像 發表于 08-23 08:04 ?3490次閱讀
    【節能學院】Acrel-1000DP<b class='flag-5'>分布式</b>光伏監控<b class='flag-5'>系統</b>在奉賢平高食品 4.4MW <b class='flag-5'>分布式</b>光伏中應用

    分布式光伏發電監測系統技術方案

    分布式光伏發電監測系統技術方案 柏峰【BF-GFQX】一、系統目標 :分布式光伏發電監測系統旨在通過智能化的監測手段,實現對
    的頭像 發表于 08-22 10:51 ?3194次閱讀
    <b class='flag-5'>分布式</b>光伏發電監測<b class='flag-5'>系統</b>技術方案

    電商 API 接口:平臺電商活動熱度實時監測

    ? 作為全球領先的短視頻平臺,其電商業務近年來蓬勃發展,吸引了眾多商家和消費者。實時監測電商活動熱度,對于商家優化營銷策略、平臺提升用戶體驗至關重要。電商 API 接口為
    的頭像 發表于 08-21 15:30 ?781次閱讀
    <b class='flag-5'>抖</b><b class='flag-5'>音</b>電商 API 接口:<b class='flag-5'>抖</b><b class='flag-5'>音</b>平臺電商活動熱度實時監測

    揭秘電商 API,讓小店粉絲增長有跡可循

    “透明路徑”。本文將逐步揭秘電商 API 的使用方法,幫助您實現粉絲增長的可視化與可控化。 一、什么是電商 API?
    的頭像 發表于 08-20 15:46 ?836次閱讀
    揭秘<b class='flag-5'>抖</b><b class='flag-5'>音</b>電商 API,讓<b class='flag-5'>抖</b><b class='flag-5'>音</b>小店粉絲增長有跡可循

    巧用電商 API,精準分析商品種草效果

    API,結合數據分析,實現精準量化種草效果。文章結構清晰,從基礎概念到實踐步驟,逐步指導您操作。所有方法基于真實電商場景,確保可靠性和可操作性。 一、電商 API 簡介與接入
    的頭像 發表于 08-20 15:29 ?1148次閱讀
    巧用<b class='flag-5'>抖</b><b class='flag-5'>音</b>電商 API,精準分析<b class='flag-5'>抖</b><b class='flag-5'>音</b>商品種草效果

    電商 API 接口:開啟小店直播帶貨數據新洞察

    深入探討該 API 如何賦能用戶,實現直播帶貨數據的實時監控、深度分析和決策支持,開啟數據驅動的新時代。 一、電商 API 接口的核心功能 電商 API 接口是
    的頭像 發表于 08-20 15:20 ?1065次閱讀
    <b class='flag-5'>抖</b><b class='flag-5'>音</b>電商 API 接口:開啟<b class='flag-5'>抖</b><b class='flag-5'>音</b>小店直播帶貨數據新洞察

    分布式光伏總出問題?安科瑞分布式光伏監控系統來“救場”

    一、分布式光伏的痛點大揭秘 在 “雙碳” 目標的大力推動下,分布式光伏作為綠色能源領域的重要力量,正以前所未有的速度蓬勃發展,越來越多的企業和家庭選擇安裝分布式光伏系統。然而,隨著
    的頭像 發表于 07-16 16:50 ?825次閱讀
    <b class='flag-5'>分布式</b>光伏總出問題?安科瑞<b class='flag-5'>分布式</b>光伏監控<b class='flag-5'>系統</b>來“救場”

    Ceph分布式存儲系統解析

    在當今數據爆炸的時代,企業對存儲系統的需求日益增長,傳統的集中式存儲已經無法滿足大規模數據處理的要求。分布式存儲系統應運而生,而Ceph作為開源分布式存儲
    的頭像 發表于 07-14 11:15 ?995次閱讀

    分布式光伏發電監控系統

    對高、低壓并網分布式光伏電站的升壓系統、光伏逆變器等設備進行全面監控,采集微機保護裝置、自動控制設備、電能質量監測裝置、光伏逆變器、一體化電源等設備數據,并提供有功功率控制(AGC)、電壓無功綜合
    的頭像 發表于 06-25 13:41 ?943次閱讀
    <b class='flag-5'>分布式</b>光伏發電監控<b class='flag-5'>系統</b>

    雙電機分布式驅動汽車高速穩定性機電耦合控制

    摘要:為了利用所設計的雙電機防滑差速驅動系統來提高分布式驅動汽車的動力學性能,在前期同軸耦合驅動控制理論研究的基礎上,開展該車的高速穩定性機電耦合控制研究。建立并驗證包含所設計驅動系統在內的
    發表于 06-18 16:37

    多通道電源管理芯片在分布式能源系統中的優化策略

    摘要: 隨著分布式能源系統的廣泛應用,對電源管理芯片的性能要求日益提升。本文深入探討了多通道電源管理芯片在分布式能源系統中的優化策略,以國科安芯的ASP4644芯片為例,從電氣特性、工
    的頭像 發表于 05-16 15:22 ?894次閱讀

    安科瑞Acrel-1000DP分布式光伏監控系統在嘉興亨泰分布式光伏項目中的應用

    摘要 分布式光伏發電系統其核心特點是發電設備靠近用電負荷中心,通常安裝在屋頂、建筑立面或閑置空地上,截至2025年,分布式光伏發電系統在全球和中國范圍內取得了顯著發展,成為能源轉型和可
    的頭像 發表于 04-10 13:17 ?850次閱讀
    安科瑞Acrel-1000DP<b class='flag-5'>分布式</b>光伏監控<b class='flag-5'>系統</b>在嘉興亨泰<b class='flag-5'>分布式</b>光伏項目中的應用

    分布式光伏發運維系統實際應用案例分享

    安科瑞劉鴻鵬 摘?要 分布式光伏發電系統其核心特點是發電設備靠近用電負荷中心,通常安裝在屋頂、建筑立面或閑置空地上,截至2025年,分布式光伏發電系統在全球和中國范圍內取得了顯著發展,
    的頭像 發表于 04-09 14:46 ?1249次閱讀
    <b class='flag-5'>分布式</b>光伏發運維<b class='flag-5'>系統</b>實際應用案例分享

    淺談分布式光伏系統在工業企業的設計及應用

    主要對工業廠區屋頂分布式光伏發電系統的設計及應用進行研究,為工業廠區能源供應提供一種全新的解決思路和技術支持。介紹了工業廠區屋頂分布式光伏系統及其優勢,分析了工業廠區屋頂
    的頭像 發表于 03-21 14:24 ?965次閱讀
    淺談<b class='flag-5'>分布式</b>光伏<b class='flag-5'>系統</b>在工業企業的設計及應用