相信很多从事AndroidTV开发的朋友都对如何展示item的选中效果感到苦恼,电视端开发与移动端最大的不同是用户只能通过一个遥控器进行控制(当然如果你的电视是触屏的话除外……),在这个时候,我们需要让用户知道当前选中的到底是哪一个项目,通常来说,有几种常见的实现方法:通过给item的background属性定义一个selector,为不同状态下(focused、selected)定义不同的背景样式来展现选中的效果。

通过定义一个全局的焦点监听view.getViewTreeObserver().addOnGlobalFocusChangeListener,来定义焦点获得时的控件行为,比如放大、改变背景等

以上两种方法虽然不需要另外增加元素,操作起来比较简单,但是效果比较生硬且单一,如果我们想要更丰富的动画效果,显然上面两种方式不能满足我们的需求。在这里,给大家介绍一个AndroidTV开发的套件Android-tv-widget。这是一个开源的AndroidTV开发框架,里面有不少为TV端适配的UI控件跟函数,可以方便我们实现不少所需的功能。在其中的com.open.androidtvwidget.view.MainUpView,就是一个可以帮助我们实现飞框选中效果的控件。

实现效果:

简单的使用:

1.首先可以在我们的页面根布局下添加这一控件

这里并不需要调整布局,因为飞框一般情况下我们设定为不可见的。在这里绑定了三个属性,一个是effect_bridge,一个是rect_padding,一个是up_rect_drawable.我们可以看一下这三个属性的定义。在ViewModel中我们添加如下三个成员(对于databinding的具体内容不在这里细述):@Bindable

public int rectDrawable = R.drawable.white_light_10;

@Bindable

public EffectNoDrawBridge bridge = new EffectNoDrawBridge();

@Bindable

public Rect rectPadding = new Rect(0, 10, 0, 10);

effect_bridge是飞框对象,我们控制飞框的聚焦跟移动都是操作这一个对象,rect_padding是飞框的内边距,可以调整这个Rect对象的大小,来调整飞框离内部四个边缘的距离,我们可以根据实际的状态适当调整,而rectDrawable则是具体的飞框样式,这里推荐使用9-Patch格式的图片,这样飞框在缩放的时候不容易变形。

实际需要我们操作的是mainupview本身以及对应的bridge对象。MainUpView mainUpView = (MainUpView) mainView.findViewById(R.id.mainUpView);

OpenEffectBridge bridge = (OpenEffectBridge) mainUpView.getEffectBridge();

在首页中,我们可以获取mainupview对象,并通过getEffectBridge()方法获取对应的bridge。

mainUpView.setFocusView(newFocus, scale);

mainUpView.setFocusView(newFocus, oldFocus, scale);

利用这两个函数,我们可以使mainUpView捕获当前获得焦点的View对象,飞框也随之移动并显示。传入的scale参数是飞框捕获view后的放大系数,用于实现放大的效果。

当然了,当屏幕上view的布局不均匀的时候,飞框效果可能比较突兀,因为可以看到一个白色的框在屏幕上闪过,如果屏幕两个控件之间的空隙较大,效果并不美观。我们可以设置飞框的动画监听,让飞框在移到目的控件后才显示。

bridge.setOnAnimatorListener(new OpenEffectBridge.NewAnimatorListener() {

@Override

public void onAnimationStart(OpenEffectBridge bridge, View view,

Animator animation) {

bridge.setVisibleWidget(true);

}

@Override

public void onAnimationEnd(OpenEffectBridge bridge, View view,

Animator animation) {

if (mSaveBridge == bridge && view.hasFocus())

bridge.setVisibleWidget(false);

}

});

在这里,setVisibleWidget方法控制bridge是否显示,传入为true的时候隐藏。我们的操作是在动画开始的时候隐藏bridge,动画结束后再重新显示。

以上就是使用MainUpView控件的基本方法,当然还有不少拓展的功能,大家可以在熟悉使用后通过阅读源码继续挖掘。希望对大家有所帮助。

原文:http://davidwillo.blog.51cto.com/12613091/1906300

android 飞框动画,AndroidTV中实现飞框选中效果相关推荐

  1. 飞桨PaddleSeg助力中国商飞航材自动化无损检测

    点击左上方蓝字关注我们 航空制造产业作为国家十三五规划和"中国制造2025"的重点发展领域之一,已经成为国家战略性产业,对于提升整体工业实力具有重大意义.而质检保障着制造的安全,飞 ...

  2. Android列表控件选项中添加进度框ProgressBar实现

        今天有时间就学习了下在ListView.GridView列表项中清加ProgressBar,小马用最简单的代码实现可以通用的功能,人人都能看懂,哈哈,直接说下,如果你的适配器getView方法 ...

  3. Android App开发动画特效中帧动画和电影淡入淡出动画的讲解及实战(附源码和演示视频 简单易懂)

    需要图片集和源码请点赞关注收藏后评论区留言~~~ 一.帧动画 Android的动画分为三类,帧动画,补间动画和属性动画.其中帧动画是实现原理最简单的一种,跟现实生活中的电影胶卷类似,都是在短时间内连续 ...

  4. 在html中加入文本框,在HTML中的文本框中添加多行

    我试图在保留设计的同时让我的文本框有多行.我对HTML/CSS相当陌生,所以请让我知道你是如何做这个家伙的.在HTML中的文本框中添加多行 此外,我试图让按钮在底部文本框的中心. 这是我的代码现在: ...

  5. Android App开发手机阅读中实现平滑翻书效果和卷曲翻书动画实战(附源码 简单易懂 可直接使用)

    需要图片集和源码请点赞关注收藏后评论区留言~~~ 一.平滑翻书效果 与纸质书籍类似,手机上的电子书也有很多页,逐页浏览可采用翻页视图,然而翻页视图犹如一幅从左到右的绵长画卷,与现实生活中上下层叠的书籍 ...

  6. android 高德地图动画,使用MotionLayout实现高德地图bottomSheets效果

    高德效果 搜到的一个效果,附上链接,用的behavior,我没下源码看,因为我只是想尝试另外一种方式.具体效果暂不知Android 仿高德地图可拉伸的BottomSheet 以下是我用motionla ...

  7. android 卡片旋转动画,Android-显示卡片翻转的动画片效果

    Android---显示卡片翻转的动画效果 本文译自:http://developer.android.com/training/animation/cardflip.html 本文介绍如何是一个自定 ...

  8. html多个文本框合并,PPT中一个文本框包含另一个文本框这两个文本框如何组合?...

    回答: TCHARszName1[100]; TCHARszName2[100]; eDit1=CreateWindowA("EDIT",(LPCSTR)szName1,WS_MU ...

  9. java 限制文本框长度_java中限制文本框输入长度的显示(转载)

    我最近在网上看到一篇文章很不错,对于限制文本框输入长度的显示很方便 JAVA不像C#能够有maxLength这个属性对文本框的输入长度进行控制,但也是有办法实现相应的功能的. 写一个MyDocumen ...

最新文章

  1. powershell 自动从组中移除禁用的账号
  2. Altium Designer旋转PCB、PCB中绕某点旋转
  3. Android GL deadlock timeout error
  4. python requests text content_python requests的content和text方法的区别
  5. 初入前端,面对一个项目应注意哪些?
  6. Erlang库 -- 有意思的库汇总
  7. 这届毕业生薪资高,是真的
  8. 小米推新,黄章怒骂!留给魅族们的时间不多了 | 畅言
  9. 基于ADS54J40的JESD204B ADC 1GHz采样逻辑开发笔记
  10. 【工作笔记001】SuperMap配准TransCAD底图
  11. jtopo 把节点做成背景图效果
  12. EAS后台事务的超时时长如何设置?
  13. 在python中if是什么意思_python中为什么需要使用“if
  14. 基于Pandas的股票数据分析
  15. 【知识点2】最大公约数与最小公约数
  16. 从一个帝国的消逝,看商业组织的进化
  17. python查找csv中某个数据_使用Python从CSV文件中查找中值
  18. Java-常用API、Lambda、常见算法
  19. C盘清理及可清理文件详解(Windows 7)-简单易操作_让你的C盘彻底解放
  20. java10_JAVA10 64位下载|java se development kit 10(JDK10)下载 v10.0 官方版 - 比克尔下载

热门文章

  1. java 生成 tar.gz_一文教您如何通过 Java 压缩文件,打包一个 tar.gz Filebeat 采集器包...
  2. ad中电容用什么封装_用什么来降低噪声?只要几个电容器就可以,简单有效!...
  3. php记录已经点击过,最近一次的PHP面试题记录,office已到手!
  4. Scrapy将爬取的段落整合为字符串
  5. 电商首页设计的时候,就应该考虑这个
  6. Javascript 检测 页面是否在iframe中
  7. 怎么查看和获取SQL Server实例名
  8. 在php里让字体划过变色,鼠标划过字体时如何用css来实现字体变色?(代码实测)...
  9. 一个平行四边形可以分成四个_将平行四边形分割成两个三角形还易变形么?(人教四下五单元三角形例2)...
  10. Ubuntu用户与用户组