由于目前在做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. 5G的风头盖过了AI,英特尔展示未来四大应用场景 | MWC2018
  2. PyQt5 图形界面-用Qt Designer来设计UI界面,并转化为python代码运行实例演示
  3. c语言中for中声明变量,C中for循环中的变量重新声明
  4. 企业门户项目实施方法论(IPS方法简介),适用于企业门户项目的项目管理方法论(上篇)...
  5. mybatis使用时遇到的一些问题------模糊查询、处理大于号小于号、相关函数替换空值...
  6. 修改C盘里windows\system32\etc里面的hosts文件并保存
  7. 使用python做最简单的爬虫
  8. VTK中导入并显示STL、3DS文件
  9. JavaScript prompt函数
  10. 职称计算机pscs4教程,2017年职称计算机photoshop测验练习(4)
  11. InfoWorld 公布开源软件( 2019 年)
  12. 【leetcode】力扣算法:杨辉三角 java语言解题
  13. 召唤神龙Ladon强化Cobalt Strike
  14. 快速理解 POJO,VO,DO,DTO,Entity
  15. 华为员工去面试被淘汰后怒怼HR:华为出来的也能被拒,很无语
  16. Oracle 11g客户端网络服务名配置
  17. html.append清空,关于jquery的append()和html()使用
  18. S03_CH02_AXI_DMA PL发送数据到PS
  19. 2020年计算机领域(人工智能、数据库、计算机理论、系统软件、计算机网络等)会议截稿日期大全!(2020年3月份更新)
  20. Android 开发中调用google语音接口

热门文章

  1. 2022 年 360反馈的好处(所有企业规模)
  2. 云之遥服务器暂停服务,《轩辕剑外传:云之遥》神魔异事录修改法
  3. 《大数据》“数据立法”专题征文(截止日期:2023年6月30日)
  4. Linux中echo命令向一个文件写入内容
  5. Ubuntu 回收站 位置(处理回收站不能打开问题)
  6. 2015年1月13日
  7. 【与达梦同行】数据库升级实战教程
  8. JqGrid 使用方法详解 一
  9. 第一句话真不知道说啥好啊!纠结啊。。。
  10. 微笑2011/(^o^)/~