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

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

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

開發(fā)TV端默認界面和視頻播放界面以及手機遙控端默認界面

電子發(fā)燒友開源社區(qū) ? 來源:HarmonyOS官方合作社區(qū) ? 作者:HarmonyOS官方合作社 ? 2022-05-26 11:06 ? 次閱讀

概述

目前家庭電視機主要通過其自帶的遙控器進行操控,實現(xiàn)的功能較為單一。例如,當我們要在TV端搜索節(jié)目時,電視機在遙控器的操控下往往只能完成一些字母或數(shù)字的輸入,而無法輸入其他復雜的內(nèi)容。分布式遙控器將手機的輸入能力和電視遙控器的遙控能力結合為一體,從而快速便捷操控電視。

分布式遙控器的實現(xiàn)基于OpenHarmony的分布式能力和RPC通信能力,UI使用eTS進行開發(fā)。如下圖所示,分別用兩塊開發(fā)板模擬TV端和手機端。

分布式組網(wǎng)后可以通過TV端界面的Controller按鈕手動拉起手機端的遙控界面,在手機端輸入時會將輸入的內(nèi)容同步顯示在TV端搜索框,點擊搜索按鈕會根據(jù)輸入的內(nèi)容搜索相關節(jié)目。

還可以通過點擊方向鍵(上下左右)將焦點移動到我們想要的節(jié)目上,再點擊播放按鈕進行播放,按返回按鈕返回TV端主界面。

同時還可以通過手機遙控端關機按鈕同時關閉TV端和手機端界面。

實現(xiàn)TV端界面

在本章節(jié)中,您將學會開發(fā)TV端默認界面和TV端視頻播放界面,示意圖參考第一章圖1和圖3所示。

建立數(shù)據(jù)模型,將圖片ID、圖片源、圖片名稱和視頻源綁定成一個數(shù)據(jù)模型。詳情代碼可以查看MainAbility/model/PicData.ets和MainAbility/model/PicDataModel.ets兩個文件。

實現(xiàn)TV端默認頁面布局和樣式,在MainAbility/pages/TVIndex.ets 主界面文件中添加入口組件。頁面布局代碼如下:

// 入口組件

@Entry

@Component

struct Index {

private letters: string[] = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

private source: string

@State text: string = ''

@State choose: number = -1

build() {

Flex({ direction: FlexDirection.Column }) {

TextInput({text: this.text, placeholder: 'Search' })

.onChange((value: string) => {

this.text = value

})

Row({space: 30}) {

Text('Clear')

.fontSize(16)

.backgroundColor('#ABB0BA')

.textAlign(TextAlign.Center)

.onClick(() => {

this.text = ''

})

.clip(true)

.borderRadius(10)

Text('Backspace')

.fontSize(16)

.backgroundColor('#ABB0BA')

.textAlign(TextAlign.Center)

.onClick(() => {

this.text = this.text.substring(0, this.text.length - 1)

})

.clip(true)

.borderRadius(10)

Text('Controller')

.fontSize(16)

.backgroundColor('#ABB0BA')

.textAlign(TextAlign.Center)

.onClick(() => {

......

})

.clip(true)

.borderRadius(10)

}

Grid() {

ForEach(this.letters, (item) => {

GridItem() {

Text(item)

.fontSize(20)

.backgroundColor('#FFFFFF')

.textAlign(TextAlign.Center)

.onClick(() => {

this.text += item

})

.clip(true)

.borderRadius(5)

}

}, item => item)

}

.rowsTemplate('1fr 1fr 1fr 1fr')

.columnsTemplate('1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr')

.columnsGap(8)

.rowsGap(8)

.width('75%')

.height('25%')

.margin(5)

.backgroundColor('#D2D3D8')

.clip(true)

.borderRadius(10)

Grid() {

ForEach(this.picItems, (item: PicData) => {

GridItem() {

PicGridItem({ picItem: item })

}

}, (item: PicData) => item.id.toString())

}

.rowsTemplate('1fr 1fr 1fr')

.columnsTemplate('1fr 1fr')

.columnsGap(5)

.rowsGap(8)

.width('90%')

.height('58%')

.backgroundColor('#FFFFFF')

.margin(5)

}

.width('98%')

.backgroundColor('#FFFFFF')

}

}

(左右移動查看全部內(nèi)容)

其中PicGridItem將PicItem的圖片源和圖片名稱綁定,實現(xiàn)代碼如下:

// 九宮格拼圖組件

@Component

struct PicGridItem {

private picItem: PicData

build() {

Column() {

Image(this.picItem.image)

.objectFit(ImageFit.Contain)

.height('85%')

.width('100%')

.onClick(() => {

......

})

})

Text(this.picItem.name)

.fontSize(20)

.fontColor('#000000')

}

.height('100%')

.width('90%')

}

}

(左右移動查看全部內(nèi)容)

實現(xiàn)TV端視頻播放界面,在MainAbility/pages/VideoPlay.ets 文件中添加組件。頁面布局代碼如下:


import router from '@system.router'

@Entry

@Component

struct Play {

// 取到Index頁面跳轉來時攜帶的source對應的數(shù)據(jù)。

private source: string = router.getParams().source

build() {

Column() {

Video({

src: this.source,

})

.width('100%')

.height('100%')

.autoPlay(true)

.controls(true)

}

}

}

(左右移動查看全部內(nèi)容)

在MainAbility/pages/TVIndex.ets中,給PicGridItem的圖片添加點擊事件,點擊圖片即可播放PicItem的視頻源。實現(xiàn)代碼如下:

Image(this.picItem.image)

......

.onClick(() => {

router.push({

uri: 'pages/VideoPlay',

params: { source: this.picItem.video }

})

})

(左右移動查看全部內(nèi)容)

實現(xiàn)手機遙控端界面

在本章節(jié)中,您將學會開發(fā)手機遙控端默認界面,示意圖參考第一章圖2所示。

PhoneAbility/pages/PhoneIndex.ets 主界面文件中添加入口組件。頁面布局代碼如下:


@Entry

@Component

struct Index {

build() {

Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center }) {

Row() {

Image($rawfile('TV.png'))

.width(25)

.height(25)

Text('華為智慧屏').fontSize(20).margin(10)

}

// 文字搜索框

TextInput({ placeholder: 'Search' })

.margin(20)

.onChange((value: string) => {

if (connectModel.mRemote){

......

}

})

Grid() {

GridItem() {

// 向上箭頭

Button({ type: ButtonType.Circle, stateEffect: true }) {

Image($rawfile('up.png')).width(80).height(80)

}

.onClick(() => {

......

})

.width(80)

.height(80)

.backgroundColor('#FFFFFF')

}

.columnStart(1)

.columnEnd(5)

GridItem() {

// 向左箭頭

Button({ type: ButtonType.Circle, stateEffect: true }) {

Image($rawfile('left.png')).width(80).height(80)

}

.onClick(() => {

......

})

.width(80)

.height(80)

.backgroundColor('#FFFFFF')

}

GridItem() {

// 播放鍵

Button({ type: ButtonType.Circle, stateEffect: true }) {

Image($rawfile('play.png')).width(60).height(60)

}

.onClick(() => {

......

})

.width(80)

.height(80)

.backgroundColor('#FFFFFF')

}

GridItem() {

// 向右箭頭

Button({ type: ButtonType.Circle, stateEffect: true }) {

Image($rawfile('right.png')).width(70).height(70)

}

.onClick(() => {

......

})

.width(80)

.height(80)

.backgroundColor('#FFFFFF')

}

GridItem() {

// 向下箭頭

Button({ type: ButtonType.Circle, stateEffect: true }) {

Image($rawfile('down.png')).width(70).height(70)

}

.onClick(() => {

......

})

.width(80)

.height(80)

.backgroundColor('#FFFFFF')

}

.columnStart(1)

.columnEnd(5)

}

.rowsTemplate('1fr 1fr 1fr')

.columnsTemplate('1fr 1fr 1fr')

.backgroundColor('#FFFFFF')

.margin(10)

.clip(new Circle({ width: 325, height: 325 }))

.width(350)

.height(350)

Row({ space:100 }) {

// 返回鍵

Button({ type: ButtonType.Circle, stateEffect: true }) {

Image($rawfile('return.png')).width(40).height(40)

}

.onClick(() => {

......

})

.width(100)

.height(100)

.backgroundColor('#FFFFFF')

// 關機鍵

Button({ type: ButtonType.Circle, stateEffect: true }) {

Image($rawfile('off.png')).width(40).height(40)

}

.onClick(() => {

......

})

.width(100)

.height(100)

.backgroundColor('#FFFFFF')

// 搜索鍵

Button({ type: ButtonType.Circle, stateEffect: true }) {

Image($rawfile('search.png')).width(40).height(40)

}

.onClick(() => {

......

})

.width(100)

.height(100)

.backgroundColor('#FFFFFF')

}

.padding({ left:100 })

}

.backgroundColor('#E3E3E3')

}

}

(左右移動查看全部內(nèi)容)

原文標題:OpenHarmony 實例:DAYU200 分布式遙控器

文章出處:【微信公眾號:HarmonyOS官方合作社區(qū)】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅

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

    關注

    18

    文章

    837

    瀏覽量

    66143
  • 電視機
    +關注

    關注

    7

    文章

    396

    瀏覽量

    44075
  • OpenHarmony
    +關注

    關注

    25

    文章

    3722

    瀏覽量

    16323

原文標題:OpenHarmony 實例:DAYU200 分布式遙控器

文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Ubuntu界面開發(fā)

    原網(wǎng)址傳送門手動分割線手動分割線手動分割線手動分割線手動分割線手動分割線正片開始在ROS librviz 人機交互軟件開發(fā)系列教程中我們實現(xiàn)了Ubuntu界面開發(fā)。但是很多小伙伴問
    發(fā)表于 08-18 08:09

    HarmonyOS教程—基于分布式能力,將手機作為智慧屏的虛擬控制器,控制文字輸入和遙控播放

    、實現(xiàn)類以及代理。service:RemoteService為TVservice,供手機遠程調(diào)用。slice:MainAbilitySl
    發(fā)表于 09-08 10:39

    DistributedVideoPlayer分布式視頻播放器的設計資料

    和電視之間傳輸視頻.應用分為手機(entry)和TV(entrytv),以及一個依賴模塊(c
    發(fā)表于 03-22 11:55

    DAYU200 | 分布式遙控

    主頁默認頁面圖2 手機遙控頁面圖3 TV視頻播放
    發(fā)表于 05-25 15:47

    VxWorks下圖形用戶界面開發(fā)

    VxWorks下圖形用戶界面開發(fā)
    發(fā)表于 03-25 10:45 ?19次下載

    基于LABVIEW的數(shù)字電源控制界面開發(fā)

    基于LABVIEW的數(shù)字電源控制界面開發(fā)詳解
    發(fā)表于 11-10 16:50 ?124次下載
    基于LABVIEW的數(shù)字電源控制<b class='flag-5'>界面</b><b class='flag-5'>開發(fā)</b>

    Linux字符界面轉圖形界面

    視頻主要詳細介紹了Linux字符界面轉圖形界面的操作教程,具體的跟隨小編一起來了解一下。
    的頭像 發(fā)表于 03-02 14:14 ?7352次閱讀

    pc是什么意思_PC與移動區(qū)別

    PC是和移動終端相對應的名詞,就是指網(wǎng)絡世界里可以連接到電腦主機的那個端口,是基于電腦的界面體系,它有別于移動手機界面體系。
    發(fā)表于 05-08 10:28 ?6.5w次閱讀

    YouTub正在為某些平臺推出經(jīng)過改進的界面

    在過去幾周左右的時間里,Android TV和Fire TV上都提供了YouTube應用的服務器更改。目前,視頻播放器用戶
    的頭像 發(fā)表于 09-30 10:25 ?2009次閱讀

    亞馬遜新的Fire TV用戶界面即將揭曉

    據(jù)外媒消息,亞馬遜將于下個月推出新的Fire TV用戶界面,以支持Fire TV Stick 4K和Fire TV Cube。根據(jù)一份新報告,亞馬遜的新Fire
    的頭像 發(fā)表于 02-19 15:30 ?1857次閱讀

    HarmonyOS UI界面活動可實現(xiàn)不同屏幕的界面適配能力

    HarmonyOS的界面設計/組件設計需要擁有良好的自適應能力,可快速進行不同尺寸屏幕的開發(fā)。其次,界面中的元素設計以及交互方式保持一致,減少了用戶的學習成本。
    的頭像 發(fā)表于 12-23 09:50 ?1818次閱讀

    SkinMagic界面開發(fā)控件下載

    SkinMagic ? 界面開發(fā)控件
    發(fā)表于 02-15 10:28 ?1次下載

    如何在CubeMx配置界面將DMA中斷的默認使能關閉

    能不能在CubeMx配置界面將DMA中斷的默認使能關閉? 這里再順便分享一個跟CubeMx配置有關的話題。目前來看,我相信對不少人還是有幫助的! 我們在使用CubeMx對STM32芯片做初始化配置
    的頭像 發(fā)表于 09-09 16:01 ?1644次閱讀
    如何在CubeMx配置<b class='flag-5'>界面</b>將DMA中斷的<b class='flag-5'>默認</b>使能關閉

    【AWTK開源智能串口屏方案】設計UI界面并上傳到串口屏

    本篇文章將介紹如何使用AWStudio設計串口屏的UI界面和添加綁定規(guī)則,以及怎么將資源文件上傳到串口屏。引言:AWTK-HMI是基于AWTK與AWTK-MVVM
    的頭像 發(fā)表于 02-22 08:24 ?725次閱讀
    【AWTK開源智能串口屏方案】設計UI<b class='flag-5'>界面</b>并上傳到串口屏

    HarmonyOS開發(fā)案例:【視頻播放器】

    使用ArkTS語言實現(xiàn)視頻播放器,主要包括主界面視頻播放界面,
    的頭像 發(fā)表于 04-23 17:25 ?703次閱讀
    HarmonyOS<b class='flag-5'>開發(fā)</b>案例:【<b class='flag-5'>視頻</b><b class='flag-5'>播放</b>器】