色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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
    +關注

    關注

    19

    文章

    2970

    瀏覽量

    104838
  • 鴻蒙系統
    +關注

    關注

    183

    文章

    2636

    瀏覽量

    66430
  • HarmonyOS
    +關注

    關注

    79

    文章

    1979

    瀏覽量

    30274

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

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

收藏 人收藏

    評論

    相關推薦

    基于ptp的分布式系統設計

    在現代分布式系統中,精確的時間同步對于確保數據一致性、系統穩定性和性能至關重要。PTP(Precision Time Protocol)是一種網絡協議,用于在分布式
    的頭像 發表于 12-29 10:09 ?123次閱讀

    HarmonyOS Next 應用元服務開發-分布式數據對象遷移數據權限與基礎數據

    提供了async版本供該場景使用。 當前,wantParams中“sessionId”字段在遷移流程中被系統占用,建議開發者在wantParams中定義其他key值存儲該分布式數據對象生成的id,避免
    發表于 12-24 09:40

    【書籍評測活動NO.53】鴻蒙操作系統設計原理與架構

    的底層設計邏輯出發,針對不同關鍵子系統的目標功能和實現路徑做實際分析解讀,幫助開發者理解鴻蒙操作系統的底層邏輯,開發更適合
    發表于 12-16 15:10

    鴻蒙開發管理:ohos.account.distributedAccount 分布式帳號管理

    獲取分布式帳號單實例對象。
    的頭像 發表于 07-08 10:03 ?259次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b>管理:ohos.account.distributedAccount <b class='flag-5'>分布式</b>帳號管理

    鴻蒙ArkTS聲明開發:跨平臺支持列表【分布式遷移標識】 通用屬性

    組件的分布式遷移標識,指明了該組件在分布式遷移場景下可以將特定狀態恢復到對端設備。
    的頭像 發表于 06-07 21:15 ?411次閱讀

    分布式SCADA系統的特點的組成

    在工業自動化和能源管理領域,SCADA(Supervisory Control And Data Acquisition)系統扮演著至關重要的角色。其中,分布式SCADA系統憑借其獨特的結構和功能
    的頭像 發表于 06-07 14:43 ?566次閱讀

    鴻蒙開發接口數據管理:【@ohos.data.distributedData (分布式數據管理)】

    分布式數據管理為應用程序提供不同設備間數據庫的分布式協同能力。通過調用分布式數據各個接口,應用程序可將數據保存到分布式數據庫中,并可對分布式
    的頭像 發表于 06-07 09:30 ?1007次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b>接口數據管理:【@ohos.data.distributedData (<b class='flag-5'>分布式</b>數據管理)】

    鴻蒙ArkUI:【從代碼到UI顯示的整體渲染流程】

    方舟開發框架(簡稱ArkUI)是鴻蒙開發UI框架,提供如下兩種開發范式,我們 **只學聲明
    的頭像 發表于 05-13 16:06 ?953次閱讀
    <b class='flag-5'>鴻蒙</b>ArkUI:【從代碼到<b class='flag-5'>UI</b>顯示的整體渲染流程】

    HarmonyOS開發實例:【分布式數據服務】

    分布式數據服務(Distributed Data Service,DDS)為應用程序提供不同設備間數據分布式的能力。
    的頭像 發表于 04-18 10:18 ?739次閱讀
    HarmonyOS<b class='flag-5'>開發</b>實例:【<b class='flag-5'>分布式</b>數據服務】

    HarmonyOS開發實例:【分布式新聞客戶端】

    基于柵格布局、設備管理和多端協同,實現一次開發,多端部署的分布式新聞客戶端頁面。
    的頭像 發表于 04-17 15:57 ?887次閱讀
    HarmonyOS<b class='flag-5'>開發</b>實例:【<b class='flag-5'>分布式</b>新聞客戶端】

    HarmonyOS開發實例:【分布式郵件】

    基于TS擴展的聲明開發范式編程語言編寫的一個分布式郵件系統,可以由一臺設備拉起另一臺設備,每次改動郵件內容,都會同步更新兩臺設備的信息
    的頭像 發表于 04-17 10:29 ?772次閱讀
    HarmonyOS<b class='flag-5'>開發</b>實例:【<b class='flag-5'>分布式</b>郵件】

    OpenHarmony南向開發案例:【分布式畫板】

    使用OpenHarmony3.1-Release開發的應用。通過OpenHarmony的分布式技術,使多人能夠一起畫畫。
    的頭像 發表于 04-12 14:40 ?1050次閱讀
    OpenHarmony南向<b class='flag-5'>開發</b>案例:【<b class='flag-5'>分布式</b>畫板】

    鴻蒙HarmonyOS開發實戰:【分布式音樂播放】

    本示例使用fileIo獲取指定音頻文件,并通過AudioPlayer完成了音樂的播放完成了基本的音樂播放、暫停、上一曲、下一曲功能;并使用DeviceManager完成了分布式設備列表的顯示和分布式能力完成了音樂播放狀態的跨設備分享。
    的頭像 發表于 04-10 17:51 ?890次閱讀
    <b class='flag-5'>鴻蒙</b>HarmonyOS<b class='flag-5'>開發</b>實戰:【<b class='flag-5'>分布式</b>音樂播放】

    鴻蒙OS 分布式任務調度

    鴻蒙OS 分布式任務調度概述 在 HarmonyO S中,分布式任務調度平臺對搭載 HarmonyOS 的多設備構筑的“超級虛擬終端”提供統一的組件管理能力,為應用定義統一的能力基線、接口
    的頭像 發表于 01-29 16:50 ?511次閱讀

    什么是分布式架構?

    分布式架構是指將一個系統或應用拆分成多個獨立的節點,這些節點通過網絡連接進行通信和協作,以實現共同完成任務的一種架構模式。這種架構模式旨在提高系統的可擴展性、可靠性和性能表現。 一、分布式
    的頭像 發表于 01-12 15:04 ?1267次閱讀
    什么是<b class='flag-5'>分布式</b>架構?
    主站蜘蛛池模板: 甜性涩爱下载| 久久婷婷电影网| 青青草狠狠干| 国产69TV精品久久久久99| 探花口爆颜射乳交日韩| 狠狠色狠狠色综合系列| 又黄又爽又无遮挡在线观看免费| 妹妹成人网| 国产白丝精品爽爽久久久久久蜜臀 | yellow视频免费观看高清在线| 婷婷精品国产亚洲AV在线观看 | 欧美xxxx83d| 国产久久热99视频| 中文无码第3页不卡av| 人人做人人干| 好紧的小嫩嫩17p| www在线小视频免费| 亚洲黄色高清| 秋霞成人午夜鲁丝一区二区三区| 国产香蕉尹人视频在线| 97精品国产自产在线观看永久| 翁熄性放纵交换01| 美女被男人撕衣舔胸| 国产骚妇BB网| 失禁h啪肉尿出来高h| 狠狠插狠狠干| 成人AV无码一二二区视频免费看| 亚洲精品一本之道高清乱码| 欧美人与禽ZOZO性伦交视频| 饥渴的40岁熟妇完整版在线| 厨房玩朋友娇妻中文字幕| 在线欧美 精品 第1页| 我不卡影院手机在线观看| 内射少妇36P亚洲区| 花蝴蝶在线观看中字| 国产AV高清怡春院| 99久久国产露脸精品竹菊传煤| 青青视频 在线 在线播放| 精品国产乱码久久久久乱码| 成人无码国产AV免费看| 99re久久热在这里精品|