安卓TV开发(四) 实现主流智能TV视频播放器UI
基于Android的多功能视频播放器的系统设计说明

文档编号:基于Android的多功能视频播放器系统设计说明书目录1引言 (4)1.1目的 (4)1.2适用围 (4)2系统架构 (5)2.1硬件架构 (5)2.2软件架构 (9)3完整功能结构图 (11)4系统数据库设计 (11)4.1 E-R图设计 (11)4.2字段设计 (11)4.2.1本地视频文件记录表 (11)4.2.2历史播放文件表 (12)4.2.3 收藏文件表 (12)5视频播放器部署图 (13)6 系统需求 (13)6.1系统界面需求 (13)6.2系统性能需求 (13)6.1系统开发环境需求 (14)7视频播放器流程图 (14)1引言1.1目的本文档是多通道同步数字记录仪升级换代项目的系统设计文档。
从系统的高层角度对系统的硬件架构、软件架构、网络架构、系统部署、系统运行方式进行设计,为下一步各个模块的详细设计提供系统级的视图。
1.2适用围本文用于描述多通道同步数字记录仪升级换代项目的系统设计,给出系统的主要架构与配置项,对相关运行、数据、用户接口、容错与复用和重要模块进行分析,作为项目后续详细设计与开发实现的依据。
本说明书的阅读对象为:跟我们同龄的有一定基础的大学生,以及相关的项目开发人员等等。
.. .. ..2系统架构2.1硬件架构2.1.1 JDK安装JDK是Java语言的原创者推出的原始开发环境。
采用JDK开发Java程序能够很快理解程序中各部分代码之间的关系,有利于理解Java面向对象的设计思想。
在Windows上安装JDK非常简单,访问Oracle官方下载页面,网址为www.oracle./technetwork/indexes/downloads/index.html,也可从其他下载。
下载完成后,双击运行JDK安装程序并根据提示设定环境变量。
2.1.2 Android SDK安装以及系统设置下载好SDK包后,将zip文件解压缩至合适的地方。
在下文中,默认SDK安装目录为$SDK_ROOT 。
视频播放器的程序设计及代码示例

视频播放器的程序设计及代码示例一、介绍视频播放器是一种常用的应用程序,用于播放电影、电视剧、MV等各种类型的视频文件。
它可以提供良好的用户体验,具备快进、快退、调节音量、全屏播放等功能。
在本文中,将介绍视频播放器的程序设计原理,并给出一些示例代码来帮助读者更好地理解和实践。
二、程序设计原理1. 用户界面设计:视频播放器的用户界面需要简洁明了,并提供直观的操作按钮,如播放、暂停、停止、快进/快退、音量调节等。
可以使用图标、按钮、滑块等控件来实现,并合理布局,以便用户轻松地操作和控制播放器。
2. 视频解码与显示:视频播放器需要将视频文件进行解码,并实时将解码后的图像进行显示。
常见的视频解码算法有H.264、MPEG-2等。
可以使用像素缓冲区来存储解码后的图像数据,并使用界面库或图形库将图像数据显示在屏幕上。
3. 音频解码与播放:视频文件中通常包含音频轨道,视频播放器需要将音频数据解码并实时播放。
音频解码可以使用MP3、AAC等常见的音频解码算法。
播放音频可以使用操作系统提供的音频播放接口,如Windows下的DirectSound、Linux下的ALSA等。
4. 文件格式支持:视频播放器需要支持常见的视频文件格式,如MP4、AVI、MKV等。
这涉及到对不同格式文件的解析和支持,需要使用相应的解析库或者开源框架。
5. 视频控制功能:视频播放器除了基本的播放、暂停、停止功能外,还应该提供快进/快退、跳转指定位置、循环播放、调节音量和亮度等高级控制功能。
通过对用户操作的监测,可以实现这些功能,并更新界面以反映当前的播放状态。
三、代码示例以下是一个基于Java编写的简单视频播放器的代码示例,用于展示播放视频文件和基本的控制功能:```javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.File;import ponent.EmbeddedMediaPlayerComponent;import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;public class SimpleVideoPlayer {private JFrame frame;private JPanel playerPanel;private JButton playButton;private JButton pauseButton;private JButton stopButton;private EmbeddedMediaPlayer mediaPlayer;public SimpleVideoPlayer() {frame = new JFrame("Simple Video Player");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(800, 600);playerPanel = new JPanel();frame.getContentPane().add(playerPanel, BorderLayout.CENTER);playButton = new JButton("Play");pauseButton = new JButton("Pause");stopButton = new JButton("Stop");playerPanel.add(playButton);playerPanel.add(pauseButton);playerPanel.add(stopButton);mediaPlayer = newEmbeddedMediaPlayerComponent().getMediaPlayer();playButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {mediaPlayer.play();}});pauseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {mediaPlayer.pause();}});stopButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {mediaPlayer.stop();}});frame.setVisible(true);}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {public void run() {SimpleVideoPlayer player = new SimpleVideoPlayer();}});}}```这段代码使用了Java语言,基于VLCJ (VLC Java Bindings)库来实现视频播放器。
基于Android的视频播放器的设计与实现--毕业论文

基于Android的视频播放器的设计与实现中文摘要如今,随着基于Android操作系统的智能手机的广泛应用,视频播放器已成为智能手机的一个必不可少的程序,广大用户迫切需要一个贴近用户、方便用户、个性化的视频播放器。
因此,设计一个基于android手机的多功能播放器,具有重要的实际意义。
本次毕业设计主要使用JDK + Eclipse + Android-SDK-Windows工具进行开发,使用的编程语言是Java语言。
该程序主要由4个不同Activity来实现,每个Activity实现相应的功能模块,能够有效满足Android手机用户在视频播放中的常见需求。
本论文详细介绍了播放器程序的设计思路、设计方案、系统结构和项目工程结构,对系统的可行性与需求性进行了详细的分析,阐述了系统各个模块功能的设计与实现。
对程序主要的Activity都进行了详细的介绍和分析,包括对其使用的布局文件的具体介绍,以及各个控件的作用。
在最后进行了程序测试,对每一个实现的模块功能都做了测试,并且记录了大量截图用来展示测试结果,以观察程序应有的功能是否正常运行,以及发现程序中可能存在的问题。
所开发的程序界面比较友好,操作相对容易,达到设计要求。
关键词:安卓;视频播放;Activity;MediaplayerThe Design and Implementation of Video Player Based on AndroidABSTRACTNow, with the wide application of smart phone based on the Android operating system, video player has become the essential application of smart phone. Most of consumers urgently require a personalized video player which is close to user and facilitate user. Therefore, the design of a multifunctional player based on android mobile phones has an important practical significance.The project design is developed by using JDK, Eclipse, and Android-SDK-Windows tools. The programming language is Java. The program consists of four different Activities and each Activity achieves the corresponding functional modules which can effectively satisfy the common requirements for playing video on Android mobile phones.This paper introduced the design ideas, design scheme, system architecture and project engineering structures of video player. The feasibility and requirements of system were analyzed in detail. The system function and each module were explained. The main Activity of the program are described and analyzed in detail including the using layout file, as well as the role of each control. Finally, I made the test for the program including the functions of each implemented modules. In order to observe whether the program should function properly and find the problems that may exist in the program, many screenshots were saved to demonstrate the test results. The developed program has a friendly interface and can be operated relatively easy, which has achieved the design requirement.KEY WORDS: Android; Video Play; Activity; Mediaplayer目录中文摘要 (I)ABSTRACT (II)目录 (III)第一章绪论 (1)1.1课题的来源及意义 (1)1.2 ANDROID发展现状及前景 (1)1.3项目的主要工作和解决的问题 (2)1.4系统设计的目标及基本思路 (3)1.5论文组织结构 (3)第二章 ANDROID视频播放器相关技术介绍 (4)2.1 ANDROID介绍 (4)2.2 ANDROID开发平台及相关技术 (5)2.2.1 ANDROID-WINDOWS开发环境 (5)2.2.2 MEDIAPLAYER视频技术 (6)2.2.3 SURFACE、SURFACEVIEW、SURFACEHOLDER三者之间的关系 (9)第三章系统分析及系统结构设计与实现 (11)3.1系统分析 (11)3.1.1系统可行性分析 (11)3.1.2 系统需求分析 (11)3.2系统结构设计 (12)第四章测试 (16)4.1测试环境和条件 (16)4.2测试 (16)4.3测试结果分析 (24)结论 (25)参考文献 (26)附录 (28)第一章绪论1.1课题的来源及意义在这个信息化的时代,IT业已经成为世界发展的主流,我们对信息技术的依赖远远超过了对我们自己的依赖,计算机和手机已经成为我们日常生活中不可缺少的获得信息的渠道。
基于Android的网络视频播放器系统设计与实现

基于Android的网络视频播放器系统设计与实现引言随着互联网、移动互联网和智能手机的普及,网络视频的需求迅速增长。
用户希望通过移动设备随时随地观看视频内容,这使手机应用程序已经成为网络视频的主要方式之一。
为了提供良好的用户体验,网络视频播放器开发成为热门的领域之一。
本文提出了一种基于Android的网络视频播放器系统,重点介绍了其设计与实现。
系统设计网络视频播放器主要由两大部分组成,即客户端和服务器。
客户端包括用户界面、视频播放器和网络传输模块,服务器包括视频存储和视频传输模块。
整个系统的设计基于MVC(Model-View-Controller)模式,其中Model代表数据模型,View代表用户界面,Controller代表控制器。
客户端用户界面:用户界面是整个网络视频播放器系统的入口。
该系统的用户界面采用Android官方推荐的Material Design设计语言,采用响应式布局,可以适配不同的屏幕大小和分辨率。
用户可以在该界面搜索、播放和下载视频。
此外,用户可以进行评论、点赞、收藏等交互操作,这些数据通过网络传输模块发送到服务器。
视频播放器:视频播放器是整个系统的核心组件。
播放器采用Android系统自带的MediaPlayer类,可以播放多种格式的视频,包括MP4、AVI、MKV和FLV等。
在播放时,播放器会先从服务器下载视频的流媒体数据,然后通过解码和渲染器进行播放。
播放器的界面有全屏和非全屏两种模式,用户可以通过手势和按钮进行切换。
此外,播放器还支持视频加速、字幕选择和画面效果调整等功能。
网络传输模块:网络传输模块主要负责与服务器进行通信。
该模块采用HTTP协议进行数据交换,包括视频流媒体数据、用户交互数据和系统消息等。
客户端与服务器之间的通信采用SSL/TLS加密,以保证通信安全。
此外,为了提高视频传输的效率,网络传输模块采用了分段下载和本地缓存策略。
服务器视频存储:视频存储模块主要负责对视频进行持久化保存和管理。
基于Android系统的视频播放器开发

仅仅 是单 一 的J a v a 和C / C + + 了 ,还有 一种 是混合 一体 的J a v a 和 c / c + + ,这也 是本 文软件 方案所 采用 的编程 语言 】 。
一
、
软件方案
主要包括整体的程序设计以及重要 的子模块编码 ,如音
视频播 放 和音视 频 同步等 。 1 . 1 整 体 方 案 。 整体 方 案 框 图如 下 图 1 所示 。该 部 分 主
! !
! Leabharlann 。 > > 基于An d r o i d 系统 的视 频播放器开发
◆ 陈 增 锋
摘要 :随着A n d r o i d J  ̄ . 统在 智能手机 及 平板 电脑 中应用 的逐 步增加 ,对 于视 频音 频等 文件 的播 放 也 已变为An d r o i d 用 户的基本要 求 。所 以 ,利 用F F mp e g  ̄ ) L @解码 速度 更好 ,播放 格 式更 齐全 的音视 频 解码 就 成为 了 目前软 件研 究 的趋 势。我 们将 分 别对音视 频播 放 的子 模块 和音 视频 同步子模 块等 进行 阐述 。在 移动终 端进行 的测试 结果表 明,该播放 器可 实现 用户播放 本地视 频的 需求 。 关键 词 : A n d r o i d ;F F mp e g ;视 频播放 器
O N I NF << , <? RE GI O 墼 字 趔 堕
输 出 和 同步 。 由于 这一 过 程 较 为 复 杂 ,并 且 是 播 放 软件 的
引 言
An d r o i d 是 一 种 以L i n u x 与J A V A为 基 础 的开 放 源代 码操
核 心 部分 ,因此 我 们 采用 了双 线 程 进 行解 决 。右 线 程 通过
开发android television类

* android.provider提供方便调用系统提供ndroid.telephony提供API和手机设备的通话接口。
* android.webikit包含以系列工作在基于Web内容的API。
* android.os提供基本的操作服务,消息传递和进程间通信IPC。
* android.graphics作为图形渲染包,提供图形渲染功能。
* android.text android.text.method android.text.style android.text.util提供一套丰富的文本处理工作,支持富文本,输入模式等。
* android.database包含底层API处理数据库,方便操作数据库表和数据。
* android.content提供各种服务访问数据在手机设备上,程序安装到手机设备和其他相关资源,以及内容提供展示动态数据。
* android.view核心用户界面框架。
* android.widget提供标准用户界面元素,List(列表),Buttons(按钮),Layout manager(布局管理器)等,是组成我们界面的基本元素。
开发android sdk/ndktelevision类
android.television,提供televisionsystem api
android sdk基本包介绍
这些都是基本包,它们是通过Android SDK来编写应用程序的基石,这里是从最底层到最高层列出并加以说明。
* android.util包含一些底层辅助类,例如:特定的容器类,XML辅助工具类等。
ANDROID课程设计视频播放器

收获:了解了视 频播放器的设计 原理和实现方法, 提高了解决问题 的能力
不足:在课程设 计中遇到了一些 困难,如视频解 码、网络传输等 问题
不足:对 Android课程设 计的深入理解和 应用还有待提高, 需要进一步学习 和实践
技术更新:关注 Android最新技术动 态,及时更新课程 内容
实践教学:增加实 践教学环节,提高 学生动手能力
搜索功能:可以搜索和 播放特定视频
开发环境:Android Studio 编程语言:Java或Kotlin 开发工具:Android SDK、Gradle、Git等 测试工具:Android Emulator、Genymotion等 版本控制:GitHub、GitLab等 协作工具:Trello、Jira等
全屏/退出全屏:点击全屏 按钮进入/退出全屏模式
视频列表:显示视频列表, 点击可播放相应视频
设置按钮:点击进入设置 界面,调整视频播放相关 设置
视频播放器功能实 现
视频解码: 将视频文 件转换为 可播放的 格式
播放控制: 包括播放、 暂停、快 进、快退 等功能
视频渲染: 将解码后 的视频数 据渲染到 屏幕上
进度条:拖动进 度条可以跳转到 任意位置播放
音频解码:支持多种音频格式的解码,如MP3、AAC、WAV等 音频播放:支持音频文件的播放,包括单曲循环、列表循环、随机播放等模式 音频控制:支持音量调节、播放进度控制、暂停/继续播放等功能 音频效果:支持音效调节,如均衡器、环绕声、低音增强等效果
视频播放器界面设 计
顶部导航栏:包括返回、菜单、搜索等 按钮
中间视频播放区域:显示视频画面,可 调整播放进度、音量等
底部控制栏:包括播放/暂停、快进/快 退、全屏等按钮
智能TV应用程序设计的技巧总结

智能TV应用程序设计的技巧总结智能电视是近年来崛起的一种新型电视媒体,随着互联网技术和智能终端的快速发展,智能电视应用程序的开发也得到了越来越广泛的关注和推广。
智能电视应用程序可以实现多种功能,比如视频点播、音乐播放、游戏娱乐等,为用户的娱乐生活带来了更多的选择和便利。
在智能电视应用程序的设计和开发中,需要掌握一定的技巧和方法,下面就对一些常见的技巧进行总结和探讨。
一、UI设计UI设计是智能电视应用程序开发的重要一环,优秀的UI设计可以提高用户体验和应用使用效率。
在UI设计中,需要注意以下几个方面:1. 界面简洁明了:尽量减小屏幕占用空间,保持核心区域简洁明了,使用户能够快速找到自己想要的功能。
2. 颜色配色合理:保证色彩搭配和平衡性,不能因为堆砌过多颜色而使用户感到混乱和误导。
3. 图标设计规范:图标的设计要符合视觉规范,体现品牌特色和应用的功能。
二、视频点播视频点播是智能电视应用程序中常见的一种功能,对于视频点播的设计和开发,需要注意以下几个方面:1. 视频格式支持:不同电视厂商对于智能电视的操作系统及硬件都可能会有一些不同的设定,所以在视频格式支持上需要考虑兼容性问题。
2. 画质优化:尽可能提高视频画质,保证用户在观看视频时的视觉体验。
3. 交互体验优化:在视频播放时,可以通过增加互动节目和观众评论功能,增强用户的参与感和社交互动性。
三、音乐播放音乐播放是智能电视应用程序中的关键功能之一,对于音乐播放的设计和开发,需要注意以下几个方面:1. 音质优化:尽可能提高音质,保证音质清晰、稳定。
2. 音乐版权问题:需要与合法的版权服务商合作,保证用户使用的音乐可靠。
3. 交互设计:音乐播放用户体验与视频类似,在听歌的过程中可以增加歌词显示、歌曲信息查询等附加功能。
四、游戏娱乐游戏娱乐是智能电视应用程序中非常重要的一个方面,可以丰富用户的娱乐体验和社交互动性。
对于游戏娱乐的设计和开发,需要注意以下几个方面:1. 游戏玩法设计:需要有趣、耐玩、易懂的游戏规则和操作方式,保证玩家能够快速进入游戏状态。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
安卓TV开发(四)实现主流智能TV视频播放器UI在FocusView中需要添加一个FocusItemModle 用于填充父布局,这个FocusItemModle 类似grideView中itemview一样,我们可以这么理解,现在我们就定义一个FocusItemModle 类,代码如下:[java] view plain copy print?在CODE上查看代码片派生到我的代码片public class FocusItemModle {private View mFocusView = null;/*** 起点行数*/private int mRow = 0;/*** view占据行数*/private int mRowSpan = 1;/*** 起点列数*/private int mCol = 0;/*** View占据列数*/private int mColSpan = 1;/*** @param v* @param row* @param col*/public FocusItemModle(View v, int row, int col) {this(v, row, 1, col, 1);}/*** @param v* @param row* @param rowspan* @param col* @param colspan*/public FocusItemModle(View v, int row, int rowspan, int col, int colspan) {mFocusView = v;setPosition(row, col);if (rowspan < 1)throw new IllegalArgumentException("rowspan < 1");mRowSpan = rowspan;if (colspan < 1)throw new IllegalArgumentException("colspan < 1");mColSpan = colspan;}public View getMetroView() {return mFocusView;}public int getRow() {return mRow;}public int getRowSpan() {return mRowSpan;}public int getCol() {return mCol;}public int getColSpan() {return mColSpan;}public void setPosition(int row, int col) {if (row < 0)throw new IllegalArgumentException("row < 0");mRow = row;if (col < 0)throw new IllegalArgumentException("col < 0");mCol = col;}此item主要控制focusView显示在第几排第几列,用于返回一个itemView显示在focusView中。
再写好这些主要view之前,便于以后项目的扩展我们就专门写一个javaBean---,TvModle,也为了迎合mvc设计模式,用来将服务器数据映射到view上。
[java] view plain copy print?在CODE上查看代码片派生到我的代码片public class TvModle {/*** 图片资源*/private int image;/*** 标题*/private String name;/*** url*/private String url;/*** 简介或信息*/private String info;/*** 日期*/private String date;/*** 包括子节目*/private List childs;public TvModle() {super();}public TvModle(int image, String name) {super();this.image = image; = name;}public int getImage() {return image;}public void setImage(int image) { this.image = image;}public String getName() {return name;}public void setName(String name) { = name;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getInfo() {return info;}public void setInfo(String info) { = info;}public String getDate() {return date;}public void setDate(String date) { this.date = date;}public List getChilds() {return childs;}public void setChilds(List childs) {this.childs = childs;}}等写好了view和中间层,接下来我们就开始写要显示该UI的activty,这里我们主要是New 一个focusView,通过不断往里面加入一个个不同的itemView。
activty:[java] view plain copy print?在CODE上查看代码片派生到我的代码片@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.mian_tv_ui);FocusView view = (FocusView) findViewById(R.id.focus_ui);view.setBackgroundColor(Color.WHITE);view.setGap(5);view.setVisibleItems(6, 5);view.setOrientation(OrientationType.Horizontal);view.setAnimation(R.anim.scale_small, R.anim.scale_big);/*view.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(FocusView metroView, View view, int col, int row,ng id) {Toast.makeText(getApplicationContext(),col+"", 1).show();}});*/getData();// 添加自定义VIEWview.addFocusItem(getTvView(mTvLists.get(0).getName(),mTvLists.get(0).getImage(),0, 3, 0, 2));view.addFocusItem(getTvView(mTvLists.get(1).getName(),mTvLists.get(1).getImage(),3, 3, 0, 2));view.addFocusItem(getTvView(mTvLists.get(2).getName(),mTvLists.get(2).getImage(),0, 2, 2, 1));view.addFocusItem(getTvView(mTvLists.get(3).getName(),mTvLists.get(3).getImage(),0, 2, 3, 1));view.addFocusItem(getTvView(mTvLists.get(4).getName(),mTvLists.get(4).getImage(),0, 2, 4 ,1));view.addFocusItem(getTvView(mTvLists.get(5).getName(),mTvLists.get(5).getImage(),2, 2, 2, 1));view.addFocusItem(getTvView(mTvLists.get(6).getName(),mTvLists.get(6).getImage(),2, 2, 3, 1));view.addFocusItem(getTvView(mTvLists.get(7).getName(),mTvLists.get(7).getImage(),2, 2, 4 ,1));view.addFocusItem(getTvView(mTvLists.get(8).getName(),mTvLists.get(8).getImage(),4, 2, 2, 1));view.addFocusItem(getTvView(mTvLists.get(9).getName(),mTvLists.get(9).getImage(),4, 2, 3, 1));view.addFocusItem(getTvView(mTvLists.get(10).getName(),mTvLists.get(10).getImage(),4, 2, 4 ,1));//添加默认logoview.addFocusItem(getDefView(0, 2, 5, 1));view.addFocusItem(getDefView(0, 2, 6, 1));view.addFocusItem(getDefView(0, 2, 7 ,1));view.addFocusItem(getDefView(0, 2, 8 ,1));view.addFocusItem(getDefView(0, 2, 9 ,1));view.addFocusItem(getDefView(2, 2, 5, 1));view.addFocusItem(getDefView(2, 2, 6, 1));view.addFocusItem(getDefView(2, 2, 7 ,1));view.addFocusItem(getDefView(2, 2, 8 ,1));view.addFocusItem(getDefView(2, 2, 9 ,1));}这里的代码比较好理解,只是将我们所要的控件找到,加入多个子item,getdata()是用来模拟获取服务数据的,本次demo暂时写到activity中,企业开发中建议单独写个manager用来控制网络层获取数据,下面是getDate(); 本文出处:/sk719887916 [java] view plain copy print?在CODE上查看代码片派生到我的代码片// 模拟网络获取数据mTvLists.add(new TvModle(R.drawable.atm, "阿童木重磅来袭"));mTvLists.add(new TvModle(R.drawable.sdyjq, "速度与激情大片在线看"));mTvLists.add(new TvModle(R.drawable.yyt, "音悦台"));mTvLists.add(new TvModle(tv, "中国网络电视台"));mTvLists.add(new TvModle(R.drawable.shtv, "东方卫视"));mTvLists.add(new TvModle(R.drawable.hutv, "芒果卫视"));mTvLists.add(new TvModle(R.drawable.gstv, "甘肃卫视"));mTvLists.add(new TvModle(tv, "江苏卫视"));mTvLists.add(new TvModle(R.drawable.shtv, "东方卫视"));mTvLists.add(new TvModle(R.drawable.pptv, "pptv"));mTvLists.add(new TvModle(R.drawable.aqy, "爱奇艺"));mTvLists.add(new TvModle(tv, "中国网络电视台"));mTvLists.add(new TvModle(R.drawable.atm, "阿童木重磅来袭"));mTvLists.add(new TvModle(R.drawable.sdyjq, "速度与激情大片在线看"));mTvLists.add(new TvModle(R.drawable.bjaqgs, "北京爱情故事"));mTvLists.add(new TvModle(R.drawable.hutv, "芒果卫视"));mTvLists.add(new TvModle(R.drawable.gstv, "甘肃卫视"));mTvLists.add(new TvModle(tv, "江苏卫视"));mTvLists.add(new TvModle(R.drawable.shtv, "东方卫视"));在上面的初始化方法中,我们会用到添加子控件的view的方法,通过getTview()和getDefView(),前面方法用于指定显示我们所要的itemView,后面方法是显示默认的view[java] view plain copy print?在CODE上查看代码片派生到我的代码片/*** getTvView* @param title* @param rouseid* @param row* @param rowspan* @param col* @param colspan* @return FocusItemVew*/private FocusItemModle getTvView(String title, int rouseid, int row, int rowspan,int col, int colspan) {LinearLayout layout = getLinearLayout();layout.setGravity(Gravity.CENTER);FrameLayout frameLayout = new FrameLayout(this);frameLayout.setPadding(PADDING, PADDING, PADDING, PADDING);TextView mTextView = new TextView(this);mTextView .setText(title);mTextView .setGravity(Gravity.CENTER);mTextView .setTextColor(Color.BLACK);mTextView .setTextSize(15);ImageView mLogoView = new ImageView(this);mLogoView.setLayoutParams(FILL_FILL);mLogoView.setImageResource(rouseid);frameLayout.addView(mLogoView, FILL_FILL);frameLayout.addView(mTextView , WRP_WRP);layout.addView(eLayout);return new FocusItemModle(layout, row, rowspan, col, colspan);}private FocusItemModle getDefView(int row, int rowspan, int col, int colspan) { LinearLayout layout = getLinearLayout();TextView tv2 = new TextView(this);tv2.setText("频道"+(i ++));tv2.setGravity(Gravity.CENTER);tv2.setTextColor(Color.WHITE);tv2.setTextSize(15);layout.addView(tv2, FILL_FILL);return new FocusItemModle(layout, row, rowspan, col, colspan);}再次我们还需要用到填充activty的Layout的xmL,比较简单[html] view plain copy print?在CODE上查看代码片派生到我的代码片<?xml version="1.0" ding="utf-8"?>android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><_ui_View.FocusViewandroid:id="@+id/focus_ui"android:layout_width="fill_parent"android:layout_height="wrap_content" /></LinearLayout>通过上篇文章结合本次文章,我们初步实现了一个在安卓TV上显示,并且可以用遥控器控制上下左右移动的效果UI,但由于只是demo,并非实际项目,所以效果比较粗糙,但是并不影响代码质量,以上的代码在tv上没有任何bug,但是运行在手机上是存有缺陷的,如果需要兼容手机,TV和手机公用一个版本的话,代码需要优化,但我本人不建议手机和电视版本公用一个版本,这样对UI的适配和焦点控制会带来众多麻烦,手机也无需这么大的使徒,但是不仿喜欢的朋友自己去完善和扩展,况且电视的操作体验是比较简单的,并且无法触屏的(但也有触屏的电视,价格不菲)后面我会继续完善本次demo,结合第三方开源视频框架,完成一个简易的tv上的视频播放器。