androidtv不只是云终端有哪些品牌还是云

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
基于Android和云平台的多媒体终端研究
下载积分:1500
内容提示:基于Android和云平台的多媒体终端研究
文档格式:PDF|
浏览次数:36|
上传日期: 16:03:20|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1500 积分
下载此文档
该用户还上传了这些文档
基于Android和云平台的多媒体终端研究
关注微信公众号安卓TV开发(五) 移动智能终端UI之实现主流TV焦点可控UI - CSDN博客
安卓TV开发(五) 移动智能终端UI之实现主流TV焦点可控UI
& 载请标明出处:,作者:skay
& &由于其他网站收录,导致你无法查看本系列原创文章请点击此处&&
&前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作体验上有很大的区别,本系列博文主要通过用TV播放器的实现去了解下在智能设备上的开发一个APP,实现遥控器控制焦点移动,方向键模拟鼠标,并在线完成视频直播,手机当遥控器使用等相关功能。此UI也适用于车载设备和移动智能家具设备,。
& &上一篇中&&&&&&初步学习了智能电视上UI的设计,且完成了在电视上可以控制的自定义View(FocusView),在上篇结尾中提到,他并不适合在手机上使用,并且也没实现点击遥控键(KEYCODE_DPAD_CENTER)的item事件,因此本篇也将会继续完善和修复此存在的问题。
一,实现遥控器Ok键Item点击事件
& 1 &通过观察GridView的源码其实继承了&AdapterView&T
extends Adapter&这个类,其中的item事件也是实现此类的&OnItemClickListener接口
源码如下:
* Interface definition for a callback to be invoked when an item in this
* AdapterView has been clicked.
public interface OnItemClickListener {
* Callback method to be invoked when an item in this AdapterView has
* been clicked.
* Implementers can call getItemAtPosition(position) if they need
* to access the data associated with the selected item.
* @param parent The AdapterView where the click happened.
* @param view The view within the AdapterView that was clicked (this
will be a view provided by the adapter)
* @param position The position of the view in the adapter.
* @param id The row id of the item that was clicked.
void onItemClick(AdapterView&?& parent, View view, int position, long id);
以上代码不难理解 AdapterView 提供个一个回调,在我们所用到的actity中或view去实现此接口。本次可以复用以上接口,使开发者习惯安卓系统的条目监听。但由于我们的view并未继承AdapterView,而在回调必须要传入一&AdapterView的父类,因此我们自定义自己的监听器。下面我们也给FocsView定义一个条目点击事件监听器。
* FocusView
* Interface definition for a callback to be invoked when an item in this
* FocusView item has been clicked.
* @author liuyongkui.
* @param &T&
public interface OnItemClickListener&T& {
* @param mFocusView
FoucusView.
* @param view
focus View item.
* @param col
* @param row
* @param id
void onItemClick(FocusView mFocusView, View focusView,
FocusItemModle&TvModle& focusItem, int Postion, int row, int col, int id);
& 同理为了开发者自定义效果,我们也为focusVIew的子条目心新增一个选中事件监听器。
* FocusView
* Interface definition for a callback to be invoked when an item in this
* FocusView item has been Selected.
* @author liuyongkui.
* @param &T&
public interface OnItemSelectedListener &T& {
* @param &T&
* @param mFocusView
FoucusView.
* @param view
focus View item.
* @param col
* @param row
* @param id
public void onItemSelected(FocusView metroView, View view, T modle, int col, int row, long id);
& 2 上列代码发现我用了一个接口泛型,此处原因是为了提高接口的扩展性,比如 开发中你定义的MusicModle ,以上的监听就会有问题了 会拋类型转换异常,因此当我们再给接口传什么Modle,回调的时候就会返回相应的modle.
&等完成了接口圆原型,再定义他为FocusView内部属性
/** items mOnItemSelectedListener*/
private OnItemSelectedListener mOnItemSelectedL
items mOnItemClickListener */
private OnItemClickListener mOnItemClickL
@SuppressWarnings(&rawtypes&)
public OnItemSelectedListener&?& getmOnItemSelectedListener() {
return mOnItemSelectedL
public void setOnItemSelectedListener(
OnItemSelectedListener mOnItemSelectedListener) {
this.mOnItemSelectedListener =
mOnItemSelectedL
&3 &完成以上工作,考虑在何时调用此接口,通过要实现的目标就能知道答案,肯定是在用户点击Ok键时触发此回调,接着重写onKeyUp()事件
继续完善上篇中已实现的上下左右的键盘事件,
case KeyEvent.KEYCODE_DPAD_CENTER:
if(mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(this,
focusItem.getFocusView(), focusItem, focusItem.getPostion(), focusItem.getRow(), focusIt
em.getCol(), focusItem.getId());
&&& 当然到这里代码肯定会有报错,因此我的FocusITemModle 也要随之加入Position,ID等 由于本次代码无adapter,因此我个人是在focusView布局时setPosition,Id也是通通过行数和列数决定,
&4 在activty中去实现此接口 ,和一般的listVIew,GrideVIew一样,但是导包必须到导入focusView的OnItemClickListener事件,值得注意的是 实现点此接口时需要我们传入object,在这里我传入: FocusItemModle&TvModle& ,和上篇有很大区别的是这次的FocusItemModle也适用了泛型,目的是为了代码灵活性。
FocusUIActivity extends Activity implements& OnItemClickListener&FocusItemModle&TvModle&&
FocusView view = (FocusView) findViewById(R.id.focus_ui);
view.setOnItemClickListener(this);& 实现接口中的onItemClick()方法:
public void onItemClick(FocusView mFocusView, View focusView,
FocusItemModle&TvModle& focusItem, int Postion, int row, int col,
long id) {
Toast.makeText(getApplicationContext(), &row:& + row
+ &col:& + col, 1).show();
通过以上三步我们完善了在按键Ok时触发的事件,同理选择事件并不需要我们按键触发,而是当Item获得焦点时触发,学习了前面知识的朋友。一定会觉得再简单不过了,这里留给读者去完善。
二,实现触屏Item点击事件
&&到此我们的代码还并不支持触摸点击,为了兼容手机我为此去实现触摸时触发onItemClick(),所以今天的难点又来了 因为我已经屏蔽了系统的触摸事件,因此继续完善OnTucH事件,首先拿到这样的一个实现需求,我们首先要想到
当用户点击屏幕的模块区域时通过点击的坐标,然后得到当我所在的view,然后触发OnItemClick()即可
&1 首先写一个工具类,专门通过X,Y去获取点击的最小View
public final class ViewUtil {
private ViewG
private static C
/** instance */
private static ViewUtil sI
private ViewUtil(ViewGroup view) {
this.view =
this.context =view.getContext();
* @return instance
public static synchronized ViewUtil getInstance(ViewGroup view) {
if (sInstance == null) {
sInstance = new ViewUtil(view);
* get Onclicked ItemView
* 在重写ViewGroup使用
* @param X
* @param Y
* @return getView
public static View getViewAtActivity(int x, int y) {
// 从Activity里获取容器
View root =((Activity)context).getWindow().getDecorView();
return findViewByXY(root, x, y);
* get Onclicked ItemView
* 在重写ViewGroup使用
* @param X
* @param Y
* @return getView
public View getViewAtViewGroup(int x, int y) {
return findViewByXY(view, x, y);
* @param view
* @param x
* @param y
private static View findViewByXY (View view, int x, int y) {
View targetView =
if (view instanceof ViewGroup) {
// 父容器,遍历子控件
ViewGroup v = (ViewGroup)
for (int i = 0; i & v.getChildCount(); i++) {
targetView = findViewByXY(v.getChildAt(i), x, y);
if (targetView != null) {
targetView = getTouchTarget(view, x, y);
return targetV
* @param view
* @param x
* @param y
private static View getTouchTarget(View view, int x, int y) {
View targetView =
ArrayList&View& TouchableViews = view.getTouchables();
for (View child : TouchableViews) {
if (isTouchPointInView(child, x, y)) {
targetView =
return targetV
* 判断view是否可以聚焦
* @param view
* @param x
* @param y
private static boolean isTouchPointInView(View view, int x, int y) {
int[] location = new int[2];
view.getLocationOnScreen(location);
int left = location[0];
int top = location[1];
int right = left + view.getMeasuredWidth();
int bottom = top + view.getMeasuredHeight();
if (view.isClickable() && y &= top && y &= bottom && x &= left
&& x &= right) {
& 2& 当拿到当前的view了,但是回调需要一个Modle,因此定义一个集合,用来将view和model一一对应,当返回view,我们可以在集合里去拿出model,在FocuasView初始化onLayout布局的时,去初始化此集合。当触摸事件并且移动距离为零时,触发回调,因为上篇已经实现了触摸滑动翻页功能。
& PS:转载请标明出处:,
//将点击的view和item modle关联起来
protected HashMap& View, FocusItemModle&TvModle&& maps = new HashMap&View, FocusItemModle&TvModle&&();
&初始化maps
protected void onLayout(boolean changed, int l, int t, int r, int b) {
final int itemCount = mFocusItems.size();
if (itemCount != getChildCount())
throw new IllegalArgumentException(&contain unrecorded child&);
for (int i = 0; i & itemC i++) {
final FocusItemModle item = mFocusItems.get(i);
final View childView = item.getFocusView();
maps.put(childView ,item);
if (childView.getVisibility() != View.GONE) {
final int childLeft = getPaddingLeft() + (mColWidth + mGapWidth) * item.getCol();
final int childTop = getPaddingTop() + (mRowHeight + mGapHeight) * item.getRow();
final int childWidth = (mColWidth + mGapWidth) * item.getColSpan() - mGapW
final int childHeight = (mRowHeight + mGapHeight) * item.getRowSpan() - mGapH
childView.layout(childLeft, childTop, childLeft + childWidth,
childTop + childHeight);
&&& 3 onTouchEvent()事件里继续处理触摸非滑动逻辑,在第二篇 MotionEvent.ACTION_UP 代码中完善,实现回调onItemClick()
case MotionEvent.ACTION_UP:
final VelocityTracker velocityTracker = mVelocityT
puteCurrentVelocity(1000);
int velocityX = (int) velocityTracker.getXVelocity();
int velocityY = (int) velocityTracker.getYVelocity();
int row = mCurR
int col = mCurC
if (velocityX & SNAP_VELOCITY && mCurCol & 0) {
} else if (velocityX & -SNAP_VELOCITY && mCurCol & mColsCount - 1) {
if (velocityY & SNAP_VELOCITY && mCurRow & 0) {
} else if (velocityY & -SNAP_VELOCITY && mCurRow & mRowsCount - 1) {
if (row == mCurRow && col == mCurCol) {
if (velocityX == 0 && velocityY == 0) {
snapToDestination();
mOnX = (int) event.getRawX();
mOnY = (int) event.getRawY();
Log.e(TAG, &rawX =& +mOnX + &
rawY =&+ mOnY);
//sendMotionEvent(mOnX,mOnY, KeyEvent.ACTION_UP);
View onClickItem = getViewAtViewGroup(mOnX,mOnY);
FocusItemModle&TvModle& onClickItemModle = maps.get(onClickItem);
if(mOnItemClickListener != null && onClickItem != null) {
Log.e(TAG, &View 2=& +mOnX + &
rawY 2 =&+ mOnY);
onClickItemModle.getCol();
onClickItemModle.getCol();
mOnItemClickListener.onItemClick(this,
onClickItem, onClickItemModle,
onClickItemModle.getRow(), onClickItemModle.getPostion(), onClickItemModle.getCol(), onClickItemModle.getId());
snapTo(row, col);
snapTo(row, col);
if (mFocusListener != null)
mFocusListener.scrollto(row, col);
if (mVelocityTracker != null) {
mVelocityTracker.recycle();
mVelocityTracker =
mTouchState = TOUCH_STATE_REST;
&&&&&&到此一切就绪了,模拟器效果:
&&& 综合以上代码 ,发现我们的View还是存在缺陷,上文就发现,因为没有adapter,导致我们的代码繁琐,并且也不符合一个集合框架(listView,GridView)的开发习惯和
实现逻辑。下篇我会通过上面的代码来优化,完成FcousView和Adapter结合,完成高效的UI框架,使得开发者自定义宽高,翻页动画,显示可见条数,和子item布局,下篇也会成为就是TV视图文章中的终结篇,之后将进行多媒体和直播流的相关知识,欢迎大家阅读。
&&&& 转载请标明出处:,作者:skay
& & & & & & & &源码下载:
& &更多技术文章请关注本人微信公众号:
本文已收录于以下专栏:
相关文章推荐
原文地址:http://blog.csdn.net/sk
作者:skay
基于6.0最新的API 支持TV的框架Android 6.0已完美支持TV开发,之前的5.0后Recyc...
做TV开发一段时间了,国内目前关于这方面的资料并不多,这里我来分享一下我对TIF的使用心得。Android TIF(Android TV Input Framework)是Google向电...
近年来,Android TV的迅速发展,传统的有线电视受到较大的冲击,在TV上用户同样也可以看到各个有线电视的直播频道,相对于手机,这种直播节目,体验效果更佳,尤其是一样赛事节目,大屏幕看得才够痛快,...
最近开始接触到Andorid TV编程,发现目前这方便的资料与比较还比较少,但现在随着产品与用户的升级,涉及到Android TV与 Android Watch的编程离我们越来越近了,本篇博客开始,将...
文/Tamic:http://blog.csdn.net/sk/article/details/前言Android TV Launcher页在RecyclerView...
如何去播放视频呢,今天就给大家简单介绍下比较常用视频开源框架vitamio,
转载说明出处 :http://blog.csdn.net/sk, 作者:skay
 前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量...
前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作TV上有很大的区别,本系列博文主...
前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作TV上有很大的区别,本系列博文主...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)09-1106-1708-0709-05
03-2303-2704-0203-26
◇本站云标签
◇热点推荐中国领先的IT技术网站
51CTO旗下网站
Android TV 背后的技术,打造更符合客厅的应用
Android TV背后的技术,Google想用更大胆的方式打造更符合客厅的应用。Google 在通过允许内容提供商切换到自己应用的方式,甚至将 Google 还打算将两种方法结合起来,不光列出 Google 推荐的结果,还会为用户提供切换到内容商应用的路径。
作者:佚名来源:36kr| 10:07
前两天,The Verge曾曝出一份关于Android TV的独家资料,据 Google 的描述,这款机顶盒产品将是&一个娱乐终端,而不是计算平台&。这个基于 Android 的新平台,将会鼓励开发者们去为一个&极简的机顶盒界面&构建&极简的配套应用&。
虽说还有很多这款机顶盒相关设备信息并未被曝出,但无论从完成度还是 The Verge 所获的消息来看,基本可以确定 Android TV 是真的存在。那 Android TV 有什么与众不同之处?
像内容目录,而不是应用
为什么要这么做?其实我们可以关注一下当下用户在智能电视上的体验:在大多数设备上,应用开发商在其应用外观及界面的设计上(大部分情况下)有着很高的自 主权,这就使得应用图标以及界面风格和 YouTube 的就有很大不同,各个应用都有着很强的辨识度。
但 Google 却貌似并不愿意给应用开发商这个自由。有消息称,Google
试图通过标准化的模板将用户界面统一起来。内容提供商将不必再提供其自己的界面,而只是将内容流提供给 Android TV
即可。比如电影标题和封面将会在 Android TV
中以统一的风格展示,而用户的体验将会是打开了一个大内容目录中的小目录,而不是打开了一个完全不同的新应用。
最终目标:让应用中的内容更易获取
这将会带来很明显的优势,它将允许用户以同样的方式在每个应用中使用遥控器操作,而在应用中部署新功能也将更为方便。但更大的优势是,这么做将会让
Google 能直接访问每个应用内的内容信息。要知道 Google 一直以来都在推动着应用内搜索技术,而 Android TV
所尝试的应用构建模式也将有助于智能电视内的内容搜索。
更值得关注的是,这样的方式还能有更大的作用,因为获取的数据是结构化的,这就使得平台不仅能知道每个视频的来源,还能知道视频的内容类别,甚至还能知道电视剧中哪几集属于同一季。
这所有的信息能帮助 Google
去构建一个更智能的通用搜索功能,它能直接将应用中的内容单独提出并呈现出来,还能通过交叉引用给出更智能的推荐。之前有内容提供商尝试过自己解决这个问题。但通过这新模式,Google 甚至还能在用户看完 Hulu Plus 的某个节目后推荐其他某个相关节目。
现实很骨感:内容商可能不买账
内容提供商真的想要这样么?已经花了大手笔去搭建自己的内容推荐算法及用户界面的内容提供商,和一些对这种 Google 所谓的新模式所能带来利益有疑虑的内容提供商,可能都不会买账。
有消息称 Google 在通过允许内容提供商切换到自己应用的方式,甚至将 Google 还打算将两种方法结合起来,不光列出 Google
推荐的结果,还会为用户提供切换到内容商应用的路径。要知道,Google 不可能推出一款没有像 Netflix 和 Hulu
这样的大牌公司合作的产品,而这就意味着 Google 将不得不做出很多妥协,导致产品最终就和现在已有的苹果,Roku 还有 Amazon
等公司的产品大同小异了。
[本文参考以下来源:]
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
聚焦关注头条聚焦热点
24H热文一周话题本月最赞
讲师:51260人学习过
讲师:131985人学习过
讲师:91259人学习过
精选博文论坛热帖下载排行
在开始学习WAN资料时,我经常面对资料深度不够或者为电气工程师编写的书。另外,在看了几本书,并且对Internet进行了研究以后,我觉得应当...
订阅51CTO邮刊您的位置: >
> 迅雷云播tv版 v1.1.18安卓版
迅雷云播tv版是针对智能电视和盒子开发的一款电视app应用,它将电脑版的云播功能完全移植到了电视盒子上,拥有海量的电影、综艺、动漫、电视剧等资源,并且支持标清、高清和超清三种播放方式,为用户带去极致的观影体验。迅雷云播tv版目前支持小米盒子、小米电视、乐视TV、百事通盒子等设备,未来将支持更多的盒子,同时用户能从云端保存播放记录,与手机、网页版云播无缝同步,三大终端完美打通,用户可在不同的设备间继续观看未看完的影片。软件介绍迅雷云播放是迅雷基于自主研发的云端视频处理技术,推出的视频在线观看服务,输入视频下载地址或BT种子,即可直接在线观看,并支持在不同的设备上同步播放记录,随时随地云播放。支持的设备目前主要支持设备:小米盒子、小米电视、乐视TV、百事通盒子。其他设备:若出现报错,请理解咱们目前只是BETA版,后续会逐步优化兼容其他设备。迅雷云播tv版特色1、随时随地云播放私人云端影视库,电脑,手机,电视全无障碍。2、流畅播放,无需等待积累多年,成熟专业的云播放技术,让你忘记下载,流畅看片。3、好友共享与小伙伴共享所爱,一起畅享云播。更新日志v1.1.18安卓版更新日志()1.告别蛋疼的遥控器输入,手机扫一扫轻松登录。2.隐私无处不在,加个密码总是更安心点3.视频不够高清?云播帮你智能转超清4.我的云播中支持查看收藏及刷新功能5.更全面的硬件兼容性测试
迅雷云播tv版 v1.1.18安卓版
您的评论需要经过审核才能显示!
热门推荐换一批
分类精品合集
分类排行榜
Copyright (C)
. All rights reserved.

我要回帖

更多关于 云终端有哪些品牌 的文章

 

随机推荐