EPG示例应用
EPG示例应用使用Vega SDK构建而成。使用此示例应用,您可以实现EPG组件。更新package.json文件
向package.json文件添加EPG组件。~说明可以自动采用3.0.0之前的任何新版本。
EPG组件用法和属性
以下代码示例示出了EPG的用法。还必须通过updateData为EPG组件提供频道和节目数据。
下图表展示了哪些属性对应于颜色。
使用timelineStyle属性自定义时间线
timelineStyle属性允许您自定义位于EPG网格上方的时间线。您可以自定义以下元素:
- 进度条:以红色突出显示的时间线部分,表示自EPG开始以来已经过去的时长。
- 播放头:标记当前时间的视觉指示器。播放头的图像必须位于assets/images文件夹中。
示例:timelineStyle结构
timelineStyle属性的详细信息,请参阅组件用法和属性部分。
收藏频道功能
EPG组件支持在频道标志单元格的左侧显示“收藏”频道的视觉指示器。您可以使用专属标志来表示“关闭”“开启”收藏状态,例如心形图标或星形图标。 示例:收藏图标
要指定收藏频道,您可以在频道对象中设置isFavorite: true。对于初始的指南显示方式,您还可以使用isFavorite: false来显示您的自定义off图标,从而将某个频道指定为非收藏频道。如果需要在运行时更改收藏状态,您可以使用命令式方法updateFavorite进行操作,如以下示例所示。
示例:updateFavorite方法
imageOff,对于isFavorite设置为false或未指定的行,会呈现“空白”图像。您必须将收藏的图像放在应用程序包源的assets/image文件夹中。
命令式方法
EPG组件比许多React Native组件更为复杂,因此需要使用特定的命令式方法。示例:获取调用命令式方法的引用
resetData方法
使用resetData方法,您可以将指南的现有数据替换为新数据。resetData方法等同于清除所有数据,然后再次调用updateData方法。
参数
channelData:一个数组,其中每个元素都是不同频道的数据。每个对象都应包含频道标识符(即 ID)相关信息和一个节目数据数组。有关此数据的结构的更多详细信息,请参阅数据模型。page(可选):一个布尔值,用于通知EPG组件与页面相关的信息,但这些信息不是频道数据的直接组成部分。page包含两个可选的子对象:startTimeMs和endTimeMs。startTimeMs(可选):用于定义查询页面开始时间的数字。仅与endTimeMs一起使用。当开始和结束时间与页面信息一起提供时,任何节目信息差都会显示为Unavailable(不可用)。endTimeMs(可选):用于定义查询页面结束时间的数字。仅与startTimeMs一起使用。当开始和结束时间与页面信息一起提供时,任何节目信息差都会显示为Unavailable(不可用)。
updateData方法
参数
channelData:一个数组,其中每个元素都是不同频道的数据。每个对象都应包含频道标识符(即 id)相关信息和一个节目数据数组。有关此数据的结构的更多详细信息,请参阅数据模型。page(可选):一个布尔值,用于通知EPG与页面相关的信息,但这些信息不是频道数据的直接组成部分。page包含两个可选的子对象:startTimeMs和endTimeMs。startTimeMs(可选):用于定义查询页面开始时间的数字。仅与endTimeMs一起使用。当开始和结束时间与页面信息一起提供时,任何节目信息差都会显示为Unavailable(不可用)。endTimeMs(可选):用于定义查询页面结束时间的数字。仅与startTimeMs一起使用。当开始和结束时间与页面信息一起提供时,任何节目信息差都会显示为Unavailable(不可用)。
描述
EPG组件用于在内部管理频道和节目的数据,因此无法通过属性传递数据。更新数据的方式改为使用updateData() 函数。此函数的输入是一个频道数据数组,其中每个元素都是不同频道的数据,包括频道的节目。然后,该输入数据会与EPG内部的现有EPG数据合并。EPG会遵循以下步骤来合并数据:
-
检查频道的数据是否已存在于EPG数据中。频道由
id属性进行唯一标识。如果EPG数据中存在相同id的频道,则表示正在添加的频道已存在。 a. 如果频道存在:访问该频道的数据记录 b. 如果该频道不存在:为该频道创建新记录 -
将输入频道数据中的节目添加到EPG数据。
对于每个节目,EPG都会检查该节目的数据是否已经存在。系统通过所属频道和
startTime对节目进行标识。如果某个节目的startTime和目标节目相同,则说明待添加的节目已经存在。- 如果节目数据已经存在:新节目数据会覆盖旧节目数据。
-
如果节目数据不存在:检查新节目的时间跨度/时间长度是否与任何现有节目重叠。
a. 如果该频道的新节目与现有节目之间没有重叠,则会将新节目添加到EPG中的相应时间。
b. 如果新节目的startTime与现有节目的endTime冲突,则会缩短现有节目,以便将新节目添加到恰当的startTime。换句话说,如果newProgram.startTime < existingProgram.endTime,则更新existingProgram,以便让existingProgram.endTime = newProgram.startTime。
c. 如果新节目的
endTime大于按时间顺序排列的下一个节目的startTime,则该新节目的时间长度会缩短。
示例
以下是应用使用updateData方法的示例。应用在下午2:00打开。
- 应用查询二维数据块中的时间线网格数据。在此示例中,返回的一“页”数据包含了10个频道12小时的节目数据。
- 应用进行查询并收到从下午2:00开始前10个频道的数据。我们称之为Page-0-0。这些数据被发送到
channelData。在内部,新频道和新节目被插入到数据存储中。 - 接下来,应用查询也是从下午2:00开始的接下来10个频道,收到Page-1-0,然后将其发送到
updateData,后者在内部插入新频道和新节目。 - 用户向右滚动一点,应用收到一个
onScroll事件,并确定有必要向右查询下一页。假设这一页包含了前10个频道,但开始时间是下午2点过后12小时,即凌晨2点。Page-0-1被发送到updateData,然后在内部,这些节目被附加到数据存储中的现有频道。
updateFavorite
有关updateFavorite方法的更多信息,请参阅收藏频道功能部分。
updateGridStartTime(gridStartTimeMs: number)
此函数设置开始时间,即网格上可见的最早时间。最初,开始时间设为当前时间,四舍五入到最接近的30分钟间隔。开始时间是静态的,不会自行更新。用户可以改为使用updateGridStartTime方法来设置开始时间。此函数接受以毫秒为单位表示的时间。建议使用30分钟的倍数作为输入时间(例如2:00、2:30、3:00、3:30)。运行updateGridStartTime后,EPG组件移除所有在新的开始时间之前结束的节目。新时间位于网格最左边。
示例
设想一下用户在下午2:00打开EPG应用的场景。用户让应用保持打开状态,直到下午5:30,则当他们在网格中浏览时,会看到大量“过期”的节目。进行调用的应用中设置了定时器,例如设为每30分钟发生一次,并且如果调用此方法,网格就会自行自动更新。数据模型
以下是对频道和节目数据的描述,调用方必须发送这些数据才能在网格中填充内容。如前所述,虽然某些字段是必填字段,但调用方发送的额外字段会被保留。因此,如果回调使用了进行调用的应用所需的任何特定元数据,则会自动支持此元数据。示例:节目
示例:频道
事件回调
该部分描述了调用方可订阅的EPG组件触发的事件。所需的事件处理程序为:onTileFocus和onTilePress。
onScroll: (event: EPGScrollEvent) => void;
滚动动画结束时触发事件。
示例:有效负载
onTileFocus: (event: EPGTileFocusEvent) => void;
此事件表示用户将焦点放在给定的磁贴上。焦点在磁贴上停留250毫秒,就会触发此事件。
示例:有效负载
onTilePress: (event: EPGTilePressEvent) => void;
焦点在某个磁贴上时,如果按下选择按钮(中央按钮),会触发事件。
示例:有效负载
onMenu: (event: EPGMenuEvent) => void;
按下菜单按钮(带有3条横线的按钮)时会触发事件。
示例:有效负载
onMetricEmit: (event: EPGMetricsEmitEvent) => void;
此属性表示目前为占位符的功能。在未来版本中,将发出可能与调用方相关的指标。此属性可以省略。
示例:有效负载
自定义字体支持
EPG可以支持自定义字体,因此您可以控制EPG中的排版。有两种字体可供选择:主要字体和辅助字体。您既可以同时指定两种字体,也可以只指定一种字体。辅助字体用于时间线栏(例如日期/时间字符串),而主要字体可用于其他任何地方(主要是磁贴内部)。将字体放在应用的assets/fonts目录中。
示例:在tileStyle属性中指定主要字体、次要字体或两者

