首页 / 行业
鸿蒙系统中用Java UI开发分布式仿抖音应用
2021-11-01 14:49:00
本文使用 Java UI 开发分布式仿抖音应用,上下滑动切换视频,评论功能,设备迁移功能:记录播放的视频页和进度、评论数据。
效果演示
①上下滑动切换视频、点击迁移图标,弹框选择在线的设备,完成视频数据的迁移。
②点击评论图标查看评论,编辑评论内容并发送。点击迁移图标,弹框选择在线的设备,完成评论数据的迁移。
项目结构
如下图:
主要代码
①上下滑动页面 页面切换用到系统组件PageSlider: 默认左右切换,设置为上下方向:setOrientation(Component.VERTICAL); 视频播放使用Player: 视频画面窗口显示使用SurfaceProvider: 跨设备迁移使用IAbilityContinuation 接口: 在 entry 下的 config.json 配置权限: 实现 IAbilityContinuation 接口,说明:一个应用可能包含多个 Page,仅需要在支持迁移的 Page 中通过以下方法实现 IAbilityContinuation 接口。 同时,此 Page 所包含的所有 AbilitySlice 也需要实现此接口。 根据上面的核心代码示例,了解实现原理,接下来便可以结合实际需求完善功能了。https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-component-pageslider-0000001091933258
importohos.aafwk.ability.AbilitySlice;importohos.aafwk.content.Intent;importohos.agp.components.*;importjava.util.ArrayList;importjava.util.List;publicclassMainAbilitySliceextendsAbilitySlice{@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);//查找滑动页面组件PageSliderpageSlider=(PageSlider)findComponentById(ResourceTable.Id_pageSlider);//设置滑动方向为上下滑动pageSlider.setOrientation(Component.VERTICAL);//集合测试数据List
②播放视频
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/media-video-player-0000000000044178
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;@OverridepublicvoidonStart(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(){/***创建视频窗口*/@OverridepublicvoidsurfaceCreated(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();}}/***视频窗口改变*/@OverridepublicvoidsurfaceChanged(SurfaceOpsholder,intformat,intwidth,intheight){}/***视频窗口销毁*/@OverridepublicvoidsurfaceDestroyed(SurfaceOpsholder){}});}}@OverrideprotectedvoidonStop(){super.onStop();//页面销毁,释放播放器if(mPlayer!=null){mPlayer.stop();mPlayer.release();}}}
③跨设备迁移示例
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-page-cross-device-0000001051072880
"reqPermissions":[{"name":"ohos.permission.DISTRIBUTED_DATASYNC"},{"name":"ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"},{"name":"ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE"}]
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";@OverridepublicvoidonStart(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->{//查询分布式网络中所有在线设备(不包括本地设备)的信息。List
最新内容
手机 |
相关内容
写flash芯片时为什么需要先擦除?
写flash芯片时为什么需要先擦除?,擦除,芯片,充电,初始状态,存储单元,数据,Flash芯片是一种非易失性存储器技术,用于存储数据并实现固射频连接器使用技巧与注意事项
射频连接器使用技巧与注意事项,连接器,选择,频率,类型,连接,传输,射频连接器是一种用于连接射频电路的电子元件,常用于无线通信系统半导体主控技术:驱动自动驾驶革命的
半导体主控技术:驱动自动驾驶革命的引擎,自动驾驶,交通,自动驾驶系统,数据,车辆,自动,随着科技的不断进步,自动驾驶技术已经成为现实晶振在激光雷达系统中的作用
晶振在激光雷达系统中的作用,作用,系统,激光雷达,晶振,可靠性,选择,激光雷达(Lidar)是一种利用激光进行测距的技术,广泛应用于自动驾驶单相滤波器:从基础到应用的全面解读
单相滤波器:从基础到应用的全面解读,滤波器,能和,噪声,选择,信号,工作原理,TVP5146PFP单相滤波器是一种用于去除电源信号中的杂波和变频器与电动机使用中需要了解的常
变频器与电动机使用中需要了解的常识,常识,变频器,转速,安装,调节,选择,BAT54S-7-F变频器与电动机是现代工业中常见的设备,常用于调Arbe 4D成像雷达以高分辨率雷达技
Arbe 4D成像雷达以高分辨率雷达技术和先进处理技术消除“幽灵刹车”问题,刹车,成像,分辨率,系统,目标,数据,Arbe 4D成像雷达是一种清华大学研发光电融合芯片,算力超商
清华大学研发光电融合芯片,算力超商用芯片三千余倍,芯片,研发,商用,测试,计算,科学研究,近日,清华大学发布了一项重要科研成果,他们成