在 Android 连接世界的大潮中,智能电视也无法幸免,成为了浪潮中的一员。我们平常拿着电视遥控器,随意地上下左右切换选中的频道图标,再按确认键进入我们所选的频道。

这看似十分平常的一个习惯,殊不知 Android 开发者在背后付出的重复性的劳动艰辛。

本节内容,将为解决智能电视中 上下左右切换选中的频道图标 而产生的焦点异常问题提供可靠性方案。

我们都知道,RecyclerView 拥有很多自定制的功能(这里笔者假设读者已经对 RecyclerView 有认识),由此笔者的思路是:能否结合 RecyclerView ,通过自定义一个 Adapter 或一个 View ,让其他类直接继承,则拥有自动正确寻找下一个应当出现的 View 的能力 ( 即用户按↑键,就会跳到上面的图标,而不会跳到其他图标的位置上或失去了焦点 )。

在笔者的多次尝试中,发现了这样的现象:

【1】RecyclerView.Adapter 是不允许多重继承的,所以不可能通过自定制 Adapter 解决问题,而用自定制 View 取代之。

【2】实际上,Android 系统已经为我们定制了可靠的寻找正确 View 的位置的算法,之所以会焦点错乱、滚动失常,是因为所应当出现的 View ,没有出现在可视范围内,由此导致焦点和滚动失效。

看到这里,我们很容易得出结论:

我们只需干预控件的滚动,而不需要干预控件寻找位置的算法,让应当被选中的 View 出现在可视范围内。

我们来看看关键的算法:

/**

* 对滚动做控制,使下一次应正确获取焦点的控件在视图中,而不对获取焦点算法进行控制

*

* @param keyCode

* @param event

*/

public void myScroll(int keyCode, KeyEvent event) {

int width = getFocusedChild().getWidth();

int height = getFocusedChild().getHeight();

int i;

int j;

for (i = 0; i * height < 700; i++) ;

for (j = 0; j * width < 1473; j++) ;

if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {

if (getFocusedChild().getX() >= (j - 1) * width)

scrollBy(getFocusedChild().getWidth() / 2, 0);

}

if (getFocusedChild().getX() <= 0) {

if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {

scrollBy(-getFocusedChild().getWidth() / 2, 0);

}

}

if (getFocusedChild().getY() >= (i - 1) * height) {

if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {

scrollBy(0, getFocusedChild().getWidth() / 2);

}

}

if (getFocusedChild().getY() <= 0) {

if (keyCode == KeyEvent.KEYCODE_DPAD_UP)

scrollBy(0, -getFocusedChild().getWidth() / 2);

}

}

至于为什么选用 RecyclerView ,是因为它能把 ListView 和 GridView 结合在一起,在互相切换时,不用做多套适配焦点系统。

由于商业上的用途,笔者在此就不贴项目源码了,此处给大家提供一种思路。如读者接触到 Android 智能电视 UI 端的开发时,以上方案不妨为一种一劳永逸的提高编程效率的方法。

android智能电视APP开发教程,Android智能电视开发之明星UI---RecyclerView相关推荐

  1. Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...

    <Android项目驱动式开发教程>第一章开发入门 1.4 项目框架分析 4 android:versionName="1.0" > 5 8 第9行代码andro ...

  2. pythoncad二次开发视频_revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档...

    二次开发 revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档2019-07-08赞( 0 ) 记录一下CAD二次开发的一些简单实例. 1.helloworld ...

  3. AutoCAD 开发文档,AutoLISP 教程,.Net AutoCAD开发教程,VB AutoCAD开发教程,ObjectARX 开发指南,VBA AutoCAD开发教程,ActiveX 开发指南

    AutoCAD 开发文档, CAD开发者社区 - AutoCAD二次开发文档,CAD二次开发,CAD插件开发,中文CAD文档 - 中文CAD开发文档,CAD二次开发问题交流,优秀插件分享 AutoLI ...

  4. android厕所app源码,智能家居app源码(android)

    [实例简介] 登录的用户名密码均为 a, 有 门禁控制 窗帘控制 空调控制 灯控制 [实例截图] [核心代码] package com.geclab.smarthome; import java.io ...

  5. java安卓app开发教程,Android app开发入门 —— your 'Hello, World'

    从这篇可以掌握到 Android app开发环境的搭建 开发工具介绍及安装 创建你的"Hello, World" 工程结构的介绍 工程gradle配置 简单布局 代码sample ...

  6. android项目开发教程,Android项目开发教程

    Android项目开发教程 编辑 锁定 讨论 上传视频 Android项目开发教程 书    名 Android项目开发教程 作    者 车金庆.何征天.李琳.严正宇.周凌翱 类    别 图书&g ...

  7. android ndk 界面开发教程,Android NDK开发之入门教程

    JNI(Java Native Interface, Java本地化方法)使得Java能与其它语言(如C.C++)的动态库进行交互. 在Android 项目中,经常看到地图,统计,推送之类的第三方平台 ...

  8. android nfc开发教程,Android NFC开发实战

    您可能感兴趣的话题: Android 核心提示:本教程为大家介绍android开发中NFC实例. 对于Android 4.0 SDK中提供的Beam例子,对于NFC开发来说的确是一个不错的模板.对于了 ...

  9. 安卓底层linux开发教程,Android手机平台移植与底层开发 PDF

    支持Android的热门ARM硬件平台简介 ARMv7架构SOC l TI OMAP系列,2009年OMAP3和OMAP4关注度较高 l Freescale i.MX51系列 l Qualcomm 8 ...

最新文章

  1. 程序员在地铁写代码遭疯狂吐槽!网友:装什么装
  2. 调整代码生成工具Database2Sharp的Winform界面生成,使其易于列表工具栏的使用。...
  3. 网页直播中推流组件EasyRTM推送RTMP扩展支持HEVC(H265)
  4. 蓝桥杯java第八届第七题--日期问题
  5. 云服务器重装系统后卡顿,云服务器Windows重装系统须知
  6. 面具公园登陆不了未能找到服务器,面具公园之后,伴圈app成为了新的替代
  7. 第012讲 盒子模型经典应用
  8. 使用xlsx.core.min.js进行导入(表格)导出(Excel)功能
  9. Hands-on C++ Game Animation Programming阅读笔记(八)
  10. ln 硬链接和软链接
  11. 真的明白Code、RO-data、RW-data和ZI-data吗?
  12. 宽带按流量计费?欢迎讨论!
  13. python推理拟合函数
  14. tcl脚本控制spirent testcenter异常记录
  15. java中五子棋_Java简单五子棋的实现
  16. eclipse如何设置背景颜色
  17. 纪念碑谷背后的故事:不差钱!8人团队研发十月
  18. apple watch更新系统时出现红色感叹号怎么办?
  19. PTA python 币值转换 ,逆序数
  20. 互联网晚报 | 3月8日 星期二 |​ ​​王传福卸任杭州比亚迪董事长;苏宁易购:南京银行拟收购苏宁消费金融36%股权...

热门文章

  1. C# FileSystemWatcher使用方法简述
  2. 「网络基础」TCP/IP协议4层模型,一分钟了解下
  3. 使用PreviousPage对象在网页间传递Web窗体内容
  4. Oracle创建用户和授权
  5. Dependency Inversion Principle
  6. 无锡小吃店燃气爆炸备受关注,应用燃气报警云平台或许可以避免!
  7. 电表老是跳闸,到底是怎么回事?
  8. VLOG制作必备,500首vlog短视频bgm,你值得收藏
  9. 计蒜客习题:新年礼物
  10. 数据分析的作用有哪些?