版权声明:本文为博主原创文章,转载请注明出处。

推荐: 欢迎关注我创建的Android TV 简书专题,会定期给大家分享一些AndroidTv相关的内容: www.jianshu.com/c/37efc6e97…


前言:在上一篇针对Android Tv的自定义RecyclerView文章中介绍了横向的RecyclerView一些用法和实现方法。在上一篇的基础上,来实现RecyclerView横向和纵向的连动效果。 ###首先上效果图:

新的版本在上一个版本的基础上添加了一些内容以及读者反馈的bug.具体添加的内容如下: 1.添加了垂直的RecyclerView,并实现了可以控制横向recyclerView的效果。 2.左右箭头点击后RecyclerView的条目不会获得焦点,解决了滑动冲突。
3.横向RecyclerView5.0以下版本之后条目放上之后会出现被压盖的情况,这里修复了该bug。
4.在RecyclerView内部不再提供类似于放大抬高z轴的操作,这里只提供了focus状态的接口,具体的逻辑在RecyclerView使用处提供回调。
###实现 下面具体来分析一下。 1.这里竖直的RecyclerView是在popupWindow中展示的。

  View popupView = getLayoutInflater().inflate(R.layout.list_menu_popwindow, null, false);mPopRecyclerView = (CustomRecyclerView)  popupView.findViewById(R.id.recycler_view);mUpArr = (ImageButton) popupView.findViewById(R.id.up_arrow);mDownArr = (ImageButton) popupView.findViewById(R.id.down_arrow);mPopupWindow = new PopupWindow(popupView, 404, 1920);mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#F8F8F8")));mPopupWindow.setFocusable(true);mPopupWindow.setOutsideTouchable(true);mPopupWindow.update();
复制代码

注意:popupWindow要设置背景。 在popupWindow进入的时候我添加了一个进入的动画:

  mPopRecyclerView.setLayoutAnimation(PopLayoutAnimation.orderAnimation());
复制代码

PopLayoutAnimation相关代码如下:

public class PopLayoutAnimation {private static Animation transAnim, alphaAnim;static LayoutAnimationController controller;public static LayoutAnimationController orderAnimation() {LayoutAnimationController controller;Animation transAnim, alphaAnim;AnimationSet set = new AnimationSet(false);transAnim = new TranslateAnimation(0, 0, -50, 0);transAnim.setDuration(167);transAnim.setFillEnabled(true);transAnim.setFillAfter(true);alphaAnim = new AlphaAnimation(0, 1);alphaAnim.setDuration(167);alphaAnim.setFillAfter(true);set.addAnimation(transAnim);set.addAnimation(alphaAnim);controller = new LayoutAnimationController(set, 1);controller.setDelay(0.33f);return controller;}public static LayoutAnimationController reserverAnimation(){AnimationSet set = new AnimationSet(false);transAnim = new TranslateAnimation(0, 0,50, 0);transAnim.setDuration(167);transAnim.setFillEnabled(true);transAnim.setFillAfter(true);// transAnim.setFillBefore(true);alphaAnim = new AlphaAnimation(0,1);alphaAnim.setDuration(167);alphaAnim.setFillAfter(true);set.addAnimation(transAnim);set.addAnimation(alphaAnim);controller = new LayoutAnimationController(set, 1);controller.setDelay(0.33f);controller.setOrder(LayoutAnimationController.ORDER_REVERSE);return controller;}public static boolean isNullAnimation(){if (controller==null||controller.isDone()){return true;}else{return false;}}public static void resetAnimation(){controller.start();}
}
复制代码

2.横向的RecyclerView在使用的过程中发现在滚动的时候,鼠标放到Item上RecyclerView为了响应item获取焦点事件会停止滚动,达不到翻页的效果。这里处理了item响应时机。在RecyclerView处于idle状态时去响应。

 holder.itemView.setOnHoverListener(new View.OnHoverListener() {@Overridepublic boolean onHover(View v, MotionEvent event) {int what = event.getAction();switch (what) {case MotionEvent.ACTION_HOVER_ENTER:RecyclerView recyclerView = (RecyclerView) holder.itemView.getParent();int[] location = new int[2];recyclerView.getLocationOnScreen(location);int x = location[0];
//                            LogUtil.i("swj","GalleryAdapter.onHover.x="+x +",width = "+(recyclerView.getWidth()+x));//为了防止滚动冲突,在滚动时候,获取焦点为了显示全,会回滚,这样会导致滚动停止if (recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE) {//当超出RecyclerView的边缘时不去响应滚动if (event.getRawX() > recyclerView.getWidth() + x || event.getRawX() < x) {return true;}//鼠标进入view,争取到焦点v.requestFocusFromTouch();v.requestFocus();
//                                LogUtil.i(this,"HomeTvAdapter.onHover.position:"+position);focusStatus(v, position);}break;case MotionEvent.ACTION_HOVER_MOVE:  //鼠标在view上移动break;case MotionEvent.ACTION_HOVER_EXIT:  //鼠标离开viewnormalStatus(v, position);break;}return false;}});
复制代码

3.横向RecyclerView在Android5.0以后的系统,item在hover态时是抬高z轴,5.0以下版本之后条目放上之后会出现被压盖的情况,这里调整了一下布局。达到了兼容。 ###结束: 这里的RecyclerView用法和普通的RecyclerView用法类似,至于布局的显示,可以根据自己的项目去定义。 项目的地址:github.com/songwenju/C… 如果对你有帮助,欢迎star和fork。如有问题,欢迎反馈交流。


推荐: 欢迎关注我创建的Android TV 简书专题,会定期给大家分享一些AndroidTv相关的内容: www.jianshu.com/c/37efc6e97…

版权声明:本文为博主原创文章,转载请注明出处。

转载于:https://juejin.im/post/5b714cbb51882561392806ce

针对Android Tv的自定义RecyclerView2 0横竖向连动相关推荐

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

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

  2. android tv 桌面,自定义RecyclerView打造Android TV桌面

    前言 Android TV Launcher页在RecyclerView出来之前大家用GridView去实现.TV开发有五向键的监听,遥控器hover监听,点击事件等.用GridView去处理焦点是有 ...

  3. 如何在Android TV上自定义推荐行

    When you fire up Android TV, the first thing you see is a list of movies and shows the system thinks ...

  4. Android tv 导航页面,android6.0 TV 添加自定义导航栏

    Android TV 通常是用遥控器操作的,系统导航栏都是关闭的,但带触摸的TV就很有必要加上导航栏了. 1. 修改base/core/res/res/values/config.xml base/c ...

  5. android tv 悬浮窗口,android TV的自定义关机弹出框

    关机的时候会走power的相关部分 首先我们监听power键的文件是在frameworks\base\services\core\java\com\android\server\policy\Phon ...

  6. Android TV 开发有关PopupWindow的KeyListener(手机也能用)

    转载请标明原地址:Android TV 开发有关PopupWindow的KeyListener(手机也能用)_高磊的专栏-CSDN博客 现在这个公司主要是做智能电视视频方面.有硬件电视盒子,APP开发 ...

  7. android 画中画模式自定义,Android 8.0 Oreo 画中画模式

    Android 8.0 Oreo(API Level 26)允许活动启动画中画 Picture-in-picture(PIP)模式.PIP 是一种特殊类型的多窗口模式,主要用于视频播放.PIP 模式已 ...

  8. android自定义横竖双向滚动,Android开发实现自定义水平滚动的容器示例

    Android开发实现自定义水平滚动的容器示例 发布时间:2020-09-12 01:25:56 来源:脚本之家 阅读:71 作者:CharlinGod 本文实例讲述了Android开发实现自定义水平 ...

  9. 小米盒子3s刷机为国际版系统android TV 8.0

    小米盒子3s刷机为国际版系统android TV 8.0 所需工具和软件 一个U盘. adb工具.使用adb工具,通过ip连接小米盒子.官方下载地址:点此进入 dump_16AB.img:MiBOX3 ...

最新文章

  1. JVM - 解读GC中的 Safe Point Safe Region
  2. Pixhawk之姿态解算篇(5)_ECF/EKF/GD介绍
  3. 给其他账户访问mysql的权限,将postgresql数据库的权限授予其他用户
  4. 电视百科常识 九大视频接口全接触
  5. Android WebView 在内部打开链接,捕获错误
  6. 带有Angular JS的Java EE 7 – CRUD,REST,验证–第2部分
  7. apache mod_xsendfile提高php文件下载速度的方法
  8. python中search和match的区别_Python中正则表达式match()、search()函数及match()和search()的区别详解...
  9. python冰雪奇缘使用教程_99 行 Python 代码实现《冰雪奇缘》特效?网友:大神碉堡!...
  10. 整好用版NI Circuit Design Suite Power Pro 11.0
  11. python打开360浏览器_python 模拟浏览器访问网页 selenium+chromedriver+360浏览器
  12. pr转场 18种不同风格图形元素小故障视频过渡pr视频转场模板
  13. 强化学习入门笔记 | UCL silver RL | UC Berkely cs285 DRL
  14. Home Assistant 发现小米设备
  15. 16位MS-DOS子系统 NTVDM cpu遇到无效指令
  16. PV + MPPT +均匀辐射
  17. 【美团】职级、薪酬、绩效全认知
  18. 一个23届蔡鸡渣硕找实习的经历(附部分记录了还想得起来的面经)
  19. 三轴可编程运动控制程序,支持信捷XDM系列PLC 信捷TG765触摸屏
  20. python实现滚动字幕

热门文章

  1. php正则表达式判断url,判断url的正则表达式
  2. 简单图片浏览器的实现
  3. 聚合Aggregation与合成Composition
  4. (14)Why some people find exercise harder than others
  5. 编译有哪些阶段,动态链接和静态链接的区别 c++
  6. LeetCode刷题感想
  7. 60款与DevOps相关的开源工具
  8. 四种排序(冒泡、插入、递归、选择)
  9. 读取xml忽略dtd验证
  10. mysql 安装以及配置