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

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

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

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

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

概述

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

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

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

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

同時還可以通過手機(jī)遙控端關(guān)機(jī)按鈕同時關(guān)閉TV端和手機(jī)端界面。

實(shí)現(xiàn)TV端界面

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

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

實(shí)現(xiàn)TV端默認(rèn)頁面布局和樣式,在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的圖片源和圖片名稱綁定,實(shí)現(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)容)

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


import router from '@system.router'

@Entry

@Component

struct Play {

// 取到Index頁面跳轉(zhuǎn)來時攜帶的source對應(yīng)的數(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的圖片添加點(diǎn)擊事件,點(diǎn)擊圖片即可播放PicItem的視頻源。實(shí)現(xiàn)代碼如下:

Image(this.picItem.image)

......

.onClick(() => {

router.push({

uri: 'pages/VideoPlay',

params: { source: this.picItem.video }

})

})

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

實(shí)現(xiàn)手機(jī)遙控端界面

在本章節(jié)中,您將學(xué)會開發(fā)手機(jī)遙控端默認(rèn)界面,示意圖參考第一章圖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')

// 關(guān)機(jī)鍵

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)容)

原文標(biāo)題:OpenHarmony 實(shí)例:DAYU200 分布式遙控器

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

審核編輯:湯梓紅

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

    關(guān)注

    18

    文章

    826

    瀏覽量

    65469
  • 電視機(jī)
    +關(guān)注

    關(guān)注

    7

    文章

    392

    瀏覽量

    43892
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3558

    瀏覽量

    15780

原文標(biāo)題:OpenHarmony 實(shí)例:DAYU200 分布式遙控器

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

收藏 人收藏

    評論

    相關(guān)推薦

    Ubuntu界面開發(fā)

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

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

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

    DistributedVideoPlayer分布式視頻播放器的設(shè)計資料

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

    DAYU200 | 分布式遙控

    主頁默認(rèn)頁面圖2 手機(jī)遙控頁面圖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字符界面轉(zhuǎn)圖形界面

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

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

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

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

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

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

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

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

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

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

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

    如何在CubeMx配置界面將DMA中斷的默認(rèn)使能關(guān)閉

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

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

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

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

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