最近在做一个TV端使用的相册。

偷偷展示一下,相册大概长这个样子:

相册也支持多选删除:

非删除模式下点击单一图片会进入单一图片展示界面。单一图片可以左右翻页。

从展示界面返回相册界面,光标定位到展示图片所在的相册位置。

主要控件使用了CardView 和RecyclerView。
TV开发和手机开发有个不同的就是焦点问题
在手机端,手指只要一划就可以到后面了,而在TV端,需要用遥控器左右键控制焦点移动。

RecyclerView(简称RV)在TV端的应用可以借鉴的案例不多,相比于ListView,RV的很多功能都需要自己实现。诸如,wrap_content自适应问题,选中的背景问题,setSelection()方法等。

将遇到的问题及大致解决方法mark一下,方便以后查询。


1.wrap_content自适应问题

参见RecyclerView自适应高度的LayoutManager

2.RV占据焦点,RV的子View没有获取焦点(ps:工程使用的是androidannotations框架,以下代码使用了androidannotations注解)

需要在RV获取焦点后手动设置下焦点:

@FocusChange(R.id.id_recyclerview_horizontal)
void focusRecyclerView(boolean hasFocus) {if (hasFocus) {focusChild(false);}}@UiThreadvoid focusChild(boolean isInit) {if (mRecyclerView.getChildCount() > 0) {mRecyclerView.getChildAt(0).requestFocus();}if (isInit) {mAct.setSelectPos(0);}}

3.多选问题
多选问题一开始是使用的List保存需要删除的图片位置,在onBindViewHolder方法中根据list中的数据来做判断,决定显示垃圾筐(选择状态)还是正常图片(非选择状态)。这样做也能达到效果,但由于Item的View是一个包含多个控件的FrameLayout,这样写需要getChildAt或者findViewById来决定取舍,觉得这样有点low。
最后选择了com.bignerdranch.android.multiselector工具
嗯,好用。

4.选中的背景问题
在SwappingHolder的子类中复写如下方法:

 @Override
public void setSelectionModeBackgroundDrawable(Drawable selectionModeBackgroundDrawable) {  super.setSelectionModeBackgroundDrawable(mAct.getResources().getDrawable(R.drawable.selector_list_item_shadow));
}

5.setSelection()方法,跳转到最后几个Item的问题
RV没有setSelection方法,官方API是这么说的

RecyclerView will scroll the minimum amount that is necessary to make the target position visible. If you are looking for a similar behavior to setSelection(int) or setSelectionFromTop(int, int), use scrollToPositionWithOffset(int, int).
有个问题就是,如果总共有15张图片,最后一页展示4个图片,那么跳转到pos大于11的图片时候,焦点却在pos==11的图片位置上。所以这个时候需要手动设置下。

@UiThread
void fouceSelected() {
if (mAct.getSelectPos()
<= linearLayoutManager.findLastVisibleItemPosition() &&
mAct.getSelectPos() >=linearLayoutManager.findFirstVisibleItemPosition()) {linearLayoutManager.findViewByPosition(mAct.getSelectPos()).requestFocus();int focusPos = mRecyclerView.getChildCount() + mAct.getSelectPos() - linearLayoutManager.findLastVisibleItemPosition() - 1;
mRecyclerView.getChildAt(focusPos).requestFocus();}}

获取RV当前显示的第一个控件的位置和最后一个控件显示的位置来计算出当前应该获取焦点的View的位置,把焦点交给它。


电视TV端使用RecyclerView开发遇到的问题相关推荐

  1. 针对Android TV端使用的自定义RecyclerView

    在Android TV中开发, 需要处理焦点的移动, 为了达到醒目的作用一般都会添加焦点移动动画和焦点选中放大效果, 为了方便在TV端使用RecyclerView, 故自定义TvRecyclerVie ...

  2. 智能电视TV开发---直播视频客户端结构设计和实现

    在智能电视TV开发---客户端和服务器通信里面我们实现了客户端和服务端的简单通信,接下来我们做一个简单的客户端界面,来实现手机端来操控智能电视的TV端. 一.存储视频的结构设计 我们在做客户端的时候, ...

  3. 智能电视TV开发---客户端和服务器通信

    在做智能电视应用的时候,最头疼的就是焦点问题,特别是对于个人开发者,没有设备这是最最头疼的事情了,在没有设备的情况下,怎么实现智能电视应用呢,接下来我是用TV程序来做演示的,所以接下来的所有操作是在有 ...

  4. 智能电视TV开发---手机直播视频客户端与智能电视通信

    在智能电视TV开发---直播视频客户端结构设计和实现中,我们设计出了简单的客户端,这里这个客户端与智能电视上面的TV服务端进行通信,实现手机控制电视来播放节目. 一.手机端UDP的client实现 在 ...

  5. 瑜伽教学TV端APP开发搭建教程IPTV系统

    瑜伽作为一种非常受欢迎的锻炼方式,受到越来越多人的喜爱.但因为时间和距离等因素的影响,很多人也喜欢自己在家里做一些瑜伽锻炼,比如饭后或者休息时间打开电视进行瑜伽锻炼,不仅仅可以很好的学习动作,还可以一 ...

  6. Android tv开发px,【Android】TV端项目开发挖坑总结

    最近完成了一个TV端的项目,大致包括影视.直播观看,手机投屏操控,内容分类推荐等功能,解决了一些坑,但同时也挖了好多(逃(●'◡'●),在此简单记录一下 1.foucus焦点问题: 简单基础的view ...

  7. android电视盒子设备名字,Android电视TV盒子开发——常用ADB命令-Go语言中文社区...

    目前智能电视(TV).盒子(机顶盒)基本都是Android系统,所以开发盒子app的重任自然就会落到我们这些苦逼Android程序员身上. PS:目前盒子的Android版本绝大部分还都是在6.0以下 ...

  8. AndroidTV开发13——实现TV端大图浏览

    AndroidTV开发13--实现TV端大图浏览 最近TV开发需要加载的图片很长,大小也很大,并且还不允许压缩.比如显示:世界地图.清明上河图.微博长图.海报.活动照片等. 那么对于这种需求,该如何做 ...

  9. 智能电视TV开发---录像

    现在社交类程序很火,里面基本包含定位,IM,微视频,在智能电视TV的客户端也会提供录像功能,然后可以传送给智能电视播放,下面我们通过一个实例实现具备录像功能. 由于手机很多都是定制系统,所以当我们设置 ...

最新文章

  1. 浪潮各机型前面板指示灯含义
  2. Elon Musk的OpenAI用VR训练机器人:解锁更多复杂动作!
  3. 中国AI服务器,刷新全球18项性能基准测试纪录
  4. Linux信号 四 异步等待信号与同步等待信号接口
  5. 分享一道阿里Java并发面试题 (详细分析篇)
  6. logstash的使用教程
  7. 盲盒(随机概率 + 最大公约数)
  8. java不要无限循环_java – 看似无限循环终止,除非使用System.out.println
  9. (转)SpringMVC学习(十一)——SpringMVC实现Resultful服务
  10. 手把手之stacking|分享集成模型在实际工作中的应用(上)
  11. IK Analyzer 中文分词器
  12. 关于SQL语句中的双引号、单引号和
  13. Windows应用程序组成及编程步骤
  14. c++ opencv 摄像头断线重联
  15. 各个平台下 Perl 源码安装教程
  16. 小米5 android7.1 root,小米MIUI 7 ROOT工具(supersu root) V5.1 最新安卓版
  17. 计算机桌面出现家庭组,win7系统桌面突然多出一个家庭组图标的解决方法
  18. vue中directives的用法
  19. 谷歌将投资10亿美元在旧金山湾区新建约2万套住房
  20. hdu6595 概率和期望

热门文章

  1. 简易版零钱通(OOP)
  2. 用计算机怎么弹最美的情侣,最美情侣钢琴谱 - 白小白 |就让我们这样弹着琴一直爱下去...
  3. visual-studio-code – 如何更改VS Code的文件排序?
  4. vue3快速入门-Teleport(瞬移组件)
  5. RCNN和SPPnet
  6. 智能手机出货量持续下跌,5G或能挽救这个行业
  7. 重要通知 | 谷歌开发者社区已使用新的活动发布平台
  8. 全智通A+常见问题汇总解答—A+会员管理发卡、会员充值保存失败
  9. 北京后厂村码农的早上
  10. excel离散度图表怎么算_“excel怎么做离散分析“EXCEL中AVEDEV计算离散度是什么?...