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

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

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

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

实现效果:

eb5ac4d0d856e6e612d2fb3af29c23e3.gif

简单的使用:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙系统支持980,鸿蒙手机上线时间 鸿蒙系统支持哪些手机2021最新汇总

鸿蒙手机来了,从2019年公布到现在的正式发布,没想到华为这么迅速,而且华为EMUI微博更名HarmonyOS,在Android与iOS这两座大山面前,大家觉得鸿蒙系统值得更新体验吗?目前来说鸿蒙系统支持第三方手机有哪些呢&…

confluence正常安装网页报错_NAS折腾手记1:在OMV5上安装ZFS On Linux的正确步骤

起因是直接安装OVMExtra里自带的zfs插件会报错,所以需要使用命令行来做一些前置准备。源配置有两种方法。1是安装OMVExtra并在内直接启用所有测试源下载地址在此​omv-extras.org2是手动添加,执行以下命令vi /etc/apt/sources.list.d/buster-backports.l…

android sdk eclipse没导入,Android—新的eclipse导入SDK出错解决办法

原先系统崩溃,重装系统,加入一块内存条,从32位变成62位,原先的eclipse用不了;去官网下载64位的eclipse,安装,用一样的方法导入SDK。这时候肯定会提示错误,如下:1.This An…

两个分数化简比怎么化_我学《分数的意义》心得

停课不停学已经有将近两个月了,我们迈入了“分数”这一部分。听妈妈说,这一块内容很重要,可我觉得到目前为止(明天就学真分数、假分数和带分数了),分数好像并不比四年级难。看了看书,再做点练习,把这点新的…

html在线拖拽环绕,jQuery实现html元素拖拽

代码很简单,效果非常棒,直接给大家上源码:html定投金额 :元10050010002000300040005000600070008000900010000单位:元css.money-input{margin:36px auto 0;width:330px;font-size:14px;color:#818181}.input-rela{width:250px;height:42px;di…

iphone 抹除设备是什么意思_SMT设备有哪些,SMT是什么意思?

SMT设备其实就是表面贴装技术所需要的机器,一般一条SMT整线常规包含以下设备:上板机、印刷机、接驳台、SPI、贴片机、插件机、回流焊、波峰焊、AOI、X-ray、下板机等设备,以上设备是一条比较完整的smt配线清单设备,不同工厂可根据…

笔记本软件页面分辨率低_笔记本最容易忽略的屏幕 有几个参数一定要知道

对于第一次购买笔记本的朋友来说,往往会忽视一个重要的硬件,那就是屏幕。尺寸有多大?分辨率是多少?色彩好不好?这些都应该是大家应该关心的问题。下面笔者就和大家聊聊笔记本屏幕应该注意的几个参数。1、尺寸屏幕尺寸示…

.NET基础 (03)生成、部署和管理

生成、部署和管理1 如何生成强签名的程序集2 如何把程序集放入GAC中3 延迟签名及其作用4 程序集的版本分哪几部分 1 如何生成强签名的程序集在生成程序集时,CLR提供了两种可选类型:强签名程序集。弱签名程序集。 强签名程序集是一个带有公钥和数字签名的…

.net 识别一维码_天若OCR文字识别 v5.0 原创好用的OCR及翻译小工具

一款非常好用的OCR及翻译小工具,集合百度、腾讯、有道、搜狗,调用了各大网站的ocr接口,免费不限次数(有道免费接口有ip限制仅供娱乐)。1、对于搜狗的接口调用的还是http://ocr.shouji.sogou.com/v2/ocr/json,这个接口识别效果很好…

html中div中加颜色,css怎样给div加边框颜色

css怎样给div加边框颜色1、css为div四个边分别添加边框border-color:#000(设置4边边框颜色为黑色)border-color:颜色值,即可设置对象边框颜色border-left-color:#000 设置左边框颜色为黑色border-right-color:#000 设置右边框颜色为黑色border-top-color:#000 设置上…

Microsoft Dynamics CRM 前瑞开发

做CRM开发最大的感受就是其前瑞开发过程中,调试起来比较麻烦,需要做一些断点还要配制一些浏览器设置,对新手来说比较困难。还有就是对REST调试,经常为了调试一个正确的结果而花费大量的时间。现在推荐一个REST 工具来调试CRM的前瑞…

割线法求解过程_求解稀疏优化问题2——临近点方法+半光滑牛顿法

这篇文章是我之前一篇文章的兄弟篇,没看过的可以看下面这个。邓康康:求解稀疏优化问题——半光滑牛顿方法​zhuanlan.zhihu.com我们考虑的问题仍然是如下的一般问题:其中 ,并且 特别大;表示一个凸可微函数,例如 表示一…

html 树形图可拖拽,HTML5拖拽API实现vue树形拖拽组件

因业务场景需要一个可拖拽修改节点位置的树形组件,因此动手撸了一个,乘此机会摸了一把html5原生拖拽。近期有时间将核心部分代码抽出,简单说下实现方式。1.树形结构-组件递归使用树形结构非常简单,tree组件作为父组件,…

jmeter如何定位网络延时_JMeter用户定义变量和properties变量高级使用

Jmeter有个配置元素叫做用户自定义变量(英文名称是UserDefinedVariables)而我们提到的vars即是Variables的简写。 之前我们也说到过Jmeter的脚本中(jsr223sampler或者beanshell编写的脚本)使用varsput和varsget的操作(varsget和put的操作仅在threadgroup测试组线程中执行&#…

jQuery中的几个模块总结

Query插件,以备并希望在前端方面有所长进。请批评指正。 一,类型判断全解 JQuery判断类型扩展方法:$.type() 1 /*type: function( obj ) { 2 if ( obj null ) { 3 return obj ""; 4 } …

python实现连续数列相加_技术 | Python经典面试题解析实现斐波那契数列

黑马程序员微信号:heiniu526传智播客旗下互联网资讯,学习资源免费分享平台大家在面试过程中经常会考到斐波那契数列,斐波那契数列(Fibonacci)最早由印度数学家Gopala提出,而第一个真正研究斐波那契数列的是意大利数学家 Leonardo …

广西2021高考成绩位次查询,2020年广西高考一分一段表及高考位次成绩排名查询(理科+文科)...

一、2020年广西高考一分一段表查询排名方法广西招办(考试院)会公布的省市高考每一分分数的考生数额统计表就是我们所说的——高考“一分一段表”,其显示出每一分的分数值全省考生有多少名,就可以让考生估算出自己的排名位次。2020年广西高考一分一段表排…

台式计算机单核与双核,什么是单核cpu、双核cpu 单核cpu和双核cpu的区别是什么...

在买电脑的时候,我们经常会发愁,究竟是买单核cpu好,还是买双核cpu比较好,尤其是面对售货员把单核cpu电脑和双核cpu电脑都可以夸的天花乱坠的时候,我们更糊涂了,究竟买哪种好呢?针对这种情况,小…

美国计算机生物学要求,美国大学CS专业分支生物信息学和计算生物学专业 Bioinformatics and Computational Biology介绍...

美国留学申请美国大学计算机专业(CS)的学生非常多。美国大学CS专业的研究分支也非常 多,不同分支对学生的要求也会不同,因此,学生们要根据自己的条件选择适合自己的研究方向。下面主要为大家介绍的是美国大学CS专业分支生物信息学和计算生物学…

Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介

【注】该系列文章以及使用到安装包/测试数据 可以在《倾情大奉送--Spark入门实战系列》获取 1、机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能&#xff0c…