由于目前在做TV电视机盒子,需要用到飞框动画,所以使用的是 这个博客下的地          址:https://git.oschina.net/hailongqiu/AndroidTVWidget,下面看下效果图:

一,主页

/*** recyclerview Demo.* setSelectedItemAtCentered 设置一直在中间. (如果设置 false,那么请使用setSelectedItemOffset来设置相差的边距)** @author hailongqiu*/
public class DemoRecyclerviewActivity extends Activity implements RecyclerViewTV.OnItemListener {private Context mContext;private RecyclerViewTV left_menu_rv; // 左侧菜单.private RecyclerViewTV mRecyclerView;private MainUpView mainUpView1;private RecyclerViewBridge mRecyclerViewBridge;private View oldView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.demo_recyclerview_activity);OPENLOG.initTag("hailongqiu", true); // 打开debug信息.mContext = DemoRecyclerviewActivity.this;left_menu_rv = (RecyclerViewTV) findViewById(R.id.left_menu_rv);mRecyclerView = (RecyclerViewTV) findViewById(R.id.recyclerView);mainUpView1 = (MainUpView) findViewById(R.id.mainUpView1);mainUpView1.setEffectBridge(new RecyclerViewBridge());// 注意这里,需要使用 RecyclerViewBridge 的移动边框 Bridge.mRecyclerViewBridge = (RecyclerViewBridge) mainUpView1.getEffectBridge();mRecyclerViewBridge.setUpRectResource(R.drawable.test_rectangle);// 初始化左侧菜单.initLeftMenu();//  初始化带标题头的demo.
//        testHeaderGridLayout();
//        testLeanbackDemo();testRecyclerViewLinerLayout(LinearLayoutManager.HORIZONTAL);//mRecyclerView.setOnItemListener(this);// item 单击事件处理.mRecyclerView.setOnItemClickListener(new RecyclerViewTV.OnItemClickListener() {@Overridepublic void onItemClick(RecyclerViewTV parent, View itemView, int position) {}});}private void initLeftMenu() {LinearLayoutManager layoutManager = new LinearLayoutManager(this);layoutManager.setOrientation(LinearLayoutManager.VERTICAL);left_menu_rv.setLayoutManager(layoutManager);left_menu_rv.setFocusable(false);GeneralAdapter generalAdapter = new GeneralAdapter(new LeftMenuPresenter());left_menu_rv.setAdapter(generalAdapter);left_menu_rv.setOnItemListener(new RecyclerViewTV.OnItemListener() {@Overridepublic void onItemPreSelected(RecyclerViewTV parent, View itemView, int position) {// 传入 itemView也可以, 自己保存的 oldView也可以.mRecyclerViewBridge.setUnFocusView(itemView);}@Overridepublic void onItemSelected(RecyclerViewTV parent, View itemView, int position) {mRecyclerViewBridge.setFocusView(itemView, 1.0f);oldView = itemView;}/*** 这里是调整开头和结尾的移动边框.*/@Overridepublic void onReviseFocusFollow(RecyclerViewTV parent, View itemView, int position) {mRecyclerViewBridge.setFocusView(itemView, 1.0f);oldView = itemView;}});left_menu_rv.setOnItemClickListener(new RecyclerViewTV.OnItemClickListener() {@Overridepublic void onItemClick(RecyclerViewTV parent, View itemView, int position) {// 测试.mRecyclerViewBridge.setFocusView(itemView, oldView, 1.0f);oldView = itemView;//onViewItemClick(itemView, position);}});}/*** 测试LinerLayout.*/private void testRecyclerViewLinerLayout(int orientation) {LinearLayoutManager layoutManager = new LinearLayoutManager(this);layoutManager.setOrientation(orientation);mRecyclerView.setLayoutManager(layoutManager);mRecyclerView.setFocusable(false);GeneralAdapter generalAdapter = new GeneralAdapter(new RecyclerViewPresenter(11));mRecyclerView.setAdapter(generalAdapter);}/*** 测试GridLayout.*/private void testRecyclerViewGridLayout(int orientation) {GridLayoutManagerTV gridlayoutManager = new GridLayoutManagerTV(this, 4); // 解决快速长按焦点丢失问题.gridlayoutManager.setOrientation(orientation);mRecyclerView.setLayoutManager(gridlayoutManager);mRecyclerView.setFocusable(false);GeneralAdapter generalAdapter = new GeneralAdapter(new RecyclerViewPresenter(100));mRecyclerView.setAdapter(generalAdapter);}/*** 测试带标题栏的grid.*/private void testHeaderGridLayout() {final GridLayoutManagerTV gridlayoutManager = new GridLayoutManagerTV(this, 5); // 解决快速长按焦点丢失问题.gridlayoutManager.setOrientation(GridLayoutManager.VERTICAL);// recyclerView.setHasFixedSize(true); // 保持固定的大小mRecyclerView.setLayoutManager(gridlayoutManager);mRecyclerView.setFocusable(false);final HeaderGridPresenter headerGridAdapter = new HeaderGridPresenter(100);GeneralAdapter generalAdapter = new GeneralAdapter(headerGridAdapter);mRecyclerView.setAdapter(generalAdapter);gridlayoutManager.setSpanSizeLookup(new SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {return headerGridAdapter.isHeader(position) ? gridlayoutManager.getSpanCount() : 1;}});}/*** Leanback 标题头.*/private static final String MOVIE_CATEGORY[] = {"全部软件","聊天工具","浏览器","游戏娱乐","网络游戏","杀毒安全",};/*** Leanback 横向 数据测试.*/private static final Movie MOVIE_ITEMS[] = {new Movie(0, "有道云笔记"),new Movie(0, "陌陌"),new Movie(0, "爱奇艺"),new Movie(0, "英雄联盟"),new Movie(0, "腾讯视频"),new Movie(0, "QQ音乐"),new Movie(0, "无敌讯飞"),};/*** Leanback Demo.*/private void testLeanbackDemo() {LinearLayoutManager layoutManager = new LinearLayoutManager(this);mRecyclerView.setLayoutManager(layoutManager);// 添加标题头.List<ListRow> listRows = new ArrayList<ListRow>();for (int i = 0; i < MOVIE_CATEGORY.length; i++) {String txt = MOVIE_CATEGORY[i];// 添加一行的数据.ListRow listRow = new ListRow(txt);for (int j = 0; j < 20; j++) {listRow.add(MOVIE_ITEMS[new Random().nextInt(MOVIE_ITEMS.length - 1)]);}listRows.add(listRow);}// 测试demo, 一般你想要自己的效果,// 继承 Header 和 List 可以继承 OpenPresente来重写.//  而横向中的item 继承 DefualtListPresenter 来重写.TestMoviceListPresenter testMoviceListPresenter = new TestMoviceListPresenter();ListRowPresenter listRowPresenter = new ListRowPresenter(listRows,new ItemHeaderPresenter(),new ItemListPresenter(testMoviceListPresenter));GeneralAdapter generalAdapter = new GeneralAdapter(listRowPresenter);mRecyclerView.setAdapter(generalAdapter);}// 左边侧边栏的单击事件.private void onViewItemClick(View v, int pos) {switch (pos) {case 0: // 横向 liner layout.testRecyclerViewLinerLayout(LinearLayoutManager.HORIZONTAL);break;case 1: // 纵向 liner layout.testRecyclerViewLinerLayout(LinearLayoutManager.VERTICAL);break;case 2: // 横向 grid layout.testRecyclerViewGridLayout(GridLayoutManager.HORIZONTAL);break;case 3: // 纵向 grid layout.testRecyclerViewGridLayout(GridLayoutManager.VERTICAL);break;case 4: // 带header的grid.testHeaderGridLayout();break;case 5: // Leanback demo.testLeanbackDemo();break;default:break;}}/*** 排除 Leanback demo的RecyclerView.*/private boolean isListRowPresenter() {GeneralAdapter generalAdapter = (GeneralAdapter) mRecyclerView.getAdapter();OpenPresenter openPresenter = generalAdapter.getPresenter();return (openPresenter instanceof ListRowPresenter);}@Overridepublic void onItemPreSelected(RecyclerViewTV parent, View itemView, int position) {if (!isListRowPresenter()) {mRecyclerViewBridge.setUnFocusView(oldView);}}@Overridepublic void onItemSelected(RecyclerViewTV parent, View itemView, int position) {if (!isListRowPresenter()) {mRecyclerViewBridge.setFocusView(itemView, 1.2f);oldView = itemView;}}@Overridepublic void onReviseFocusFollow(RecyclerViewTV parent, View itemView, int position) {if (!isListRowPresenter()) {mRecyclerViewBridge.setFocusView(itemView, 1.2f);oldView = itemView;}}

二,单个xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:clipChildren="false"android:clipToPadding="false"android:orientation="horizontal"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><com.open.androidtvwidget.leanback.recycle.RecyclerViewTVandroid:id="@+id/left_menu_rv"android:layout_width="@dimen/w_200"android:layout_height="match_parent"android:focusable="false"android:nextFocusRight="@+id/recyclerView" /><com.open.androidtvwidget.leanback.recycle.RecyclerViewTVandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#000000"android:focusable="false"android:nextFocusLeft="@+id/left_menu_rv"android:padding="20dp"android:paddingBottom="80dp"></com.open.androidtvwidget.leanback.recycle.RecyclerViewTV></LinearLayout><!-- 最顶层边框 --><com.open.androidtvwidget.view.MainUpViewandroid:id="@+id/mainUpView1"android:layout_width="wrap_content"android:layout_height="wrap_content" />

三,有一个androidtvwidget.jar包

项目的具体下载地址:https://git.oschina.net/hailongqiu/AndroidTVWidget

Android Tv电视机盒子使用Recyclerview实现飞框动画相关推荐

  1. android tv侧边栏,Android Tv电视机盒子使用Recyclerview实现飞框动画

    一,主页 /** * recyclerview Demo. * setSelectedItemAtCentered 设置一直在中间. (如果设置 false,那么请使用setSelectedItemO ...

  2. android tv nugat,GitHub - GongXunYoung/Android-tv-widget: Android tv,盒子,投影仪 控件

    Android TV 开发框架 QQ群:522186932 Leanback 框架(类似谷歌的Leanback,更简直,更方便): 键盘框架: 菜单框架: 整体目录结构 *AndroidTvWidet ...

  3. 小米盒子 android tv,小米盒子3 MDZ-16-AA 降级及刷入Android TV系统

    小米盒子3 MDZ-16-AA 降级及刷入Android TV系统 来源于小米盒子3C的教程:https://rdma.co/mdz-16-aa/ 两者仅遥控按键不一样,其它硬件都是相同的. #### ...

  4. 小米盒子3增强版 android tv,小米盒子3增强版刷Android TV系统

    写在前面: 注意事项:1.一旦刷机完成,可能没有机会再刷回MIUI TV官方系统,且可能会失去保修,所以,请慎重决定! 请慎重决定! 请慎重决定! 2.有些图片我可能忘记拍摄,我会尽量补上 2019/ ...

  5. Android TV 上使用的RecyclerView和焦点框架,焦点框移动效果,完胜androidTvwidget的MainUpView

    android tv开发最完美的框架,支持列表加载更多,移动框效果设置,废话不多说上图 资源链接:http://download.csdn.net/download/u014764233/983929 ...

  6. android 气球动画,Android TV使用贝赛尔曲线制作炫酷的开场动画

    目录 前言 很多App启动的时候会用到炫酷的开场动画.Android TV端也一样,每一个不同的模块,产品经理都可能设计了不同的开场动画.对于这些复杂的开场动画,最重要的是学会拆分,只要拆分得当,就会 ...

  7. android 飞框动画,AndroidTV中实现飞框选中效果

    相信很多从事AndroidTV开发的朋友都对如何展示item的选中效果感到苦恼,电视端开发与移动端最大的不同是用户只能通过一个遥控器进行控制(当然如果你的电视是触屏的话除外--),在这个时候,我们需要 ...

  8. android tv github,GitHub - dongbingliu/Android-tv-widget: Android tv,盒子,投影仪 控件

    [前言] 因为要加强 Android 投影仪的 luncher 倒影国际化的功能,所以开始的时候在BroderView的基础改了些东西. 后来又一些BUG,修复了,感觉毕竟是用的别人的开源代码,如果不 ...

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

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

最新文章

  1. 初学flex时候搞得一个大头贴工具(开源)
  2. python多态的概念_python中的多态
  3. C++ string 使用详解(含C++20新特性)
  4. 基于verilog的FFT设计与实现
  5. 去除 position:fixed 抖动的方法
  6. linux下部署mysql数据库连接_Linux远程部署MySQL数据库详细步骤
  7. 用Python玩转时序数据
  8. 数三角形(51Nod-2497)
  9. (22)VHDL实现比较器(二位数值)
  10. 【Codeforces 851D Arpa and a list of numbers】
  11. 开放源码的.NET 反编译工具 .NET IL调试工具 学习微软中间语言(MSIL)的绝佳工具 Dotnet IL Editor 推荐...
  12. 使用spark-shell从本地读取文件不成功的的操作。
  13. [Study] 通过游戏学编程的网站
  14. java 快排_总结Java中的排序算法:选择排序amp;快排amp;堆排序amp;归并排序(后附视频讲解)...
  15. winpe安装服务器系统教程,【实测】U盘启动WinPE安装服务器Windows_Server_2008r2.doc
  16. 栅格那点儿事(一)---Raster是个啥子东西
  17. 关于bit-banding的解释和相关作用(转载)
  18. python中交集并集用什么符号表示_Python实现两个list求交集,并集,差集的方法示例...
  19. VisualVM 启动报错Error Starting VisualVM:You are running VisualVM using Java Runtime Environment(JRE)
  20. 机器学习算法优缺点总结

热门文章

  1. 2016年计算机考研高校排名,2016年计算机考研高校排名
  2. 应急响应-HW之windows 应急响应之入侵排查技巧
  3. MFC 利用checkbox 做成切换开关按钮
  4. 搞笑“修勾”在线修沟,魔性配音不绝于耳,这种短视频如何制作
  5. 与君欢喜城,暖色度余生——CSDN
  6. 联诚发祝你端午安康幸福美满
  7. plc设备远程控制系统
  8. Linux docker(01) 基础操作
  9. java遍历是什么意思_详解java中多种通用遍历方式
  10. 老程序员教你如何提高开发效率、成为大神2——时间与团队管理