android智能电视APP开发教程,Android智能电视开发之明星UI---RecyclerView
在 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相关推荐
- Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...
<Android项目驱动式开发教程>第一章开发入门 1.4 项目框架分析 4 android:versionName="1.0" > 5 8 第9行代码andro ...
- pythoncad二次开发视频_revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档...
二次开发 revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档2019-07-08赞( 0 ) 记录一下CAD二次开发的一些简单实例. 1.helloworld ...
- AutoCAD 开发文档,AutoLISP 教程,.Net AutoCAD开发教程,VB AutoCAD开发教程,ObjectARX 开发指南,VBA AutoCAD开发教程,ActiveX 开发指南
AutoCAD 开发文档, CAD开发者社区 - AutoCAD二次开发文档,CAD二次开发,CAD插件开发,中文CAD文档 - 中文CAD开发文档,CAD二次开发问题交流,优秀插件分享 AutoLI ...
- android厕所app源码,智能家居app源码(android)
[实例简介] 登录的用户名密码均为 a, 有 门禁控制 窗帘控制 空调控制 灯控制 [实例截图] [核心代码] package com.geclab.smarthome; import java.io ...
- java安卓app开发教程,Android app开发入门 —— your 'Hello, World'
从这篇可以掌握到 Android app开发环境的搭建 开发工具介绍及安装 创建你的"Hello, World" 工程结构的介绍 工程gradle配置 简单布局 代码sample ...
- android项目开发教程,Android项目开发教程
Android项目开发教程 编辑 锁定 讨论 上传视频 Android项目开发教程 书 名 Android项目开发教程 作 者 车金庆.何征天.李琳.严正宇.周凌翱 类 别 图书&g ...
- android ndk 界面开发教程,Android NDK开发之入门教程
JNI(Java Native Interface, Java本地化方法)使得Java能与其它语言(如C.C++)的动态库进行交互. 在Android 项目中,经常看到地图,统计,推送之类的第三方平台 ...
- android nfc开发教程,Android NFC开发实战
您可能感兴趣的话题: Android 核心提示:本教程为大家介绍android开发中NFC实例. 对于Android 4.0 SDK中提供的Beam例子,对于NFC开发来说的确是一个不错的模板.对于了 ...
- 安卓底层linux开发教程,Android手机平台移植与底层开发 PDF
支持Android的热门ARM硬件平台简介 ARMv7架构SOC l TI OMAP系列,2009年OMAP3和OMAP4关注度较高 l Freescale i.MX51系列 l Qualcomm 8 ...
最新文章
- 程序员在地铁写代码遭疯狂吐槽!网友:装什么装
- 调整代码生成工具Database2Sharp的Winform界面生成,使其易于列表工具栏的使用。...
- 网页直播中推流组件EasyRTM推送RTMP扩展支持HEVC(H265)
- 蓝桥杯java第八届第七题--日期问题
- 云服务器重装系统后卡顿,云服务器Windows重装系统须知
- 面具公园登陆不了未能找到服务器,面具公园之后,伴圈app成为了新的替代
- 第012讲 盒子模型经典应用
- 使用xlsx.core.min.js进行导入(表格)导出(Excel)功能
- Hands-on C++ Game Animation Programming阅读笔记(八)
- ln 硬链接和软链接
- 真的明白Code、RO-data、RW-data和ZI-data吗?
- 宽带按流量计费?欢迎讨论!
- python推理拟合函数
- tcl脚本控制spirent testcenter异常记录
- java中五子棋_Java简单五子棋的实现
- eclipse如何设置背景颜色
- 纪念碑谷背后的故事:不差钱!8人团队研发十月
- apple watch更新系统时出现红色感叹号怎么办?
- PTA python 币值转换 ,逆序数
- 互联网晚报 | 3月8日 星期二 |​ ​​王传福卸任杭州比亚迪董事长;苏宁易购:南京银行拟收购苏宁消费金融36%股权...