作者: 夏至,欢迎转载,但请保留这段申明,谢谢
http://blog.csdn.net/u011418943/article/details/76687529

在 Android Tv 或者其他需要使用 遥控器来操作的设备,有一个好看的游标动画,除了能提高用户体验外,还能让你的作品看起来更加智能化,当然,github 上已经有开源出来了,如下:
https://git.oschina.net/kumei/AndroidTVWidget
效果很不错,但结构比较大,移植和理解起来也比较麻烦,那能不能简单点呢?

答案是肯定的,先看效果:

如果在我们的设备中,使用这种效果,那么看起来会很舒服,本着都开源的原则,这里我也把我的代码共享出来。让 TV 的小伙伴少走一些弯路。工程连接在末尾。

原理其实很简单,当一个控件在获取到焦点的时候,我们就把这张 .9图设置当作它的背景,当移动到另一个控件的时候,这个背景图就要跟着移动了;
那么边框怎么自动变化呢?

首先,获取现在控件的坐标值 (left,top,right,bottom),减去上一次的控件的坐标值 (left,top,right,bottom),这个过程用属性动画来,那么光标就可以从这个控件移动到另一个控件了,还能自由伸缩,这就是游标动画的核心所在,其他就没啥好写的了。

只要理解了思路,其他的就基本没问题了,整个过程写起来撑死了100行

核心代码:

int translateLeft = torect.left - oldrect.left - mRectOffsertWidth; //左焦点int translateTop = torect.top - oldrect.top - mRectOffsertWidth;  //右焦点//当两者之间有大小之分,才去改变,减少绘制if (currentView.getWidth() - this.getWidth() != 0) {//移动时改变边框大小,让效果看起来更加自然layoutSizeChangeWidthAnim(this.getWidth(), currentView.getWidth() + 2 * mRectOffsertWidth);layoutSizeChangeHeightAnim(this.getHeight(), currentView.getHeight() + 2 * mRectOffsertWidth);}//移动函数flyRectAnim(translateLeft, translateTop);

上面的移动动画,分成两步,一部分是不需要太多这里写代码片变化的坐标 left,top,所以用 flyRectAnim 来写,如下:

 /*** 移动函数* @param left* @param top*/private void flyRectAnim(int left,int top){//非常简单,我们只要提供left 和 top 即可animate().translationX(left).translationY(top).setDuration(mAnimationTime).setInterpolator(new LinearInterpolator()).start();}

直接移动过去即可,而 right 和 bottom ,为了有一种缓慢变形的感觉,我们需要重写一些,如下:

/*** 调整移动时,边框宽度的变化* @param oldwidht* @param curwidht*/private void layoutSizeChangeWidthAnim(int oldwidht,int curwidht){ValueAnimator animator = ValueAnimator.ofFloat(oldwidht,curwidht);animator.setDuration(mAnimationTime - mAnimationTimeWH);animator.setInterpolator(new LinearInterpolator());animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(final ValueAnimator animation) {mHandler.post(new Runnable() {@Overridepublic void run() {float width = (float) Float.parseFloat( animation.getAnimatedValue().toString());ViewGroup.LayoutParams params = mView.getLayoutParams();params.width = (int) width;mView.setLayoutParams(params);}});}});animator.start();}

非常简单,就是一个 ValuteAnimator 属性动画;这样就可以了!!

什么?没了?

是的,没了,没多难理解,直接撸一遍就可以了。整个动画有用部分,就是移动控件的坐标,简单到发指。
工程连接如下,喜欢记得start 或fork啊

https://github.com/LillteZheng/AndroidTvRectAnim.git

利用属性动画轻松实现 Android TV 游标动画,你缺的是几行代码相关推荐

  1. Android动画之前先闪一下,开机动画(闪动的ANDROID字样的动画图片)

    开机动画(闪动的ANDROID字样的动画图片) Android 的系统登录动画相仿于Windows系统的滚动条,是由前景和背景两张PNG图片构成,这两张图片存在于/system/framework / ...

  2. android动画影子效果,Android TV常用动画的效果,View选中变大且有阴影(手机也能用)...

    因为电视屏幕比较大,而我们看电视时距离电视有一定距离,这样就需要动画效果比较明显,这个动画就是应用最广泛的,因为很酷,呵呵,你懂得,看了就知道. 效果如下图: public class MainAct ...

  3. android淡入淡出动画_在Android中淡入动画示例

    android淡入淡出动画 1) XML File: activity_main 1)XML文件:activity_main <?xml version="1.0" enco ...

  4. android 动画结束停留,android中Animation动画的连续播放与播放完毕后停留在最后的状态...

    我们做安卓应用的苦逼程序员们常常会需要用到Animation也就是动画.比如做地图功能的时候.我们在手机旋转时需要根据手机重力感应来调整地图的角度,让它上面的"北"一直指向地球的北 ...

  5. Android安全防护之旅—只需要这几行代码让Android程序项目变得更加安全

    一.混淆永远都不可或缺 这里说的混淆不是说的传统大家都知道的简单混淆策略,而是高级一点的混淆策略,首先是代码混淆,大家可以参考小黄车app的代码: 看到了吧人家把代码混淆成中国人可以看懂的信息,可惜这 ...

  6. android手势控制动画,轻松实现Android,iOS的一个手势动画效果

    先来看效果 这是iOS下的效果,android下完全一致.通过do_GestureView组件和do_Animation组件,deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过 ...

  7. android+动画+锯齿,Android_rotate--animation 动画旋转两图片,消除动画锯齿现象 android 开发:动画旋转两图片 - 下载 - 搜珍网...

    Android+动画旋转两图/ Android+动画旋转两图/.classpath Android+动画旋转两图/.project Android+动画旋转两图/.settings/ Android+ ...

  8. android中如何停止动画,如何在Android中停止动画

    动画仅移动屏幕上的像素,而不移动对象的位置.为了让你留在它的最后,设置你的 animation.setFillAfter(true); 要实际移动对象的位置,请查看使用以下代码段的修改版本. Marg ...

  9. github仿android便签,有人在Github上用几行代码就造了个锤子便签

    锤子便签,作为老罗的又一款设计感爆棚的产品,可能是史上最漂亮的便签应用,你或许会因它重新喜欢上记录和表达.它不仅可以输入文字,还支持插入图片.你还可以随时随地将便签内容生成精美的长微博或网页并分享. ...

最新文章

  1. 文件分享微信小程序的设计与开发 Java开发微信小程序 毕业设计
  2. iOS App 连接外设的几种方式
  3. java dozer 深度_java – Dozer深度映射设置为Set
  4. 万字长文 | 新零售的五重境界
  5. flarum论坛如何html,简约个人小清新论坛-Flarum的快速搭建方法
  6. C语言学习之从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)
  7. 微型计算机最怕的是什么,为什么以前学生上“微机课”都要穿鞋套?老师:怕电脑中病毒...
  8. Mybatis 一对多 简单映射配置
  9. 在你的网站中使用 AdSense广告
  10. 如何把pdf转换成word文档?
  11. Unity 的Position和Rotation问题(坑)
  12. 双11有哪些好用的降噪蓝牙耳机值得推荐?降噪蓝牙耳机性价比排行
  13. JAVA LIST、ARRAY 移除其中某一元素
  14. github电脑壁纸_GitHub - githubtaotao/bing-wallpaper: Bing每日壁纸,自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事...
  15. 软件定义存储(SDS)之入门
  16. Typora编辑器(蓝奏)
  17. sql导入txt数据出错被截断等
  18. 静态代码分析工具清单:开源篇(各语言)
  19. Electron系列教程——第二篇:第一个示例
  20. ESOURCE_LOCKED - cannot obtain exclusive access to locked queue '2484_0_00163'

热门文章

  1. Android高仿京东、天猫下拉刷新
  2. java fgc时间过长_elasticsearch 一次长时间 FGC 问题分析
  3. 【苹果推群发】imessage软件安装使用新的deviceToken
  4. 【原创】西门子S7-1500PLC使用 EPOS控制V90伺服驱动器
  5. ipynb pycharm 运行_在pychar中写入ipynb文件,PyCharm,编写
  6. Java+MySQL +spring+vue二手车交易管理系统
  7. Android自定义View系列之详解View的绘制流程
  8. 移动App开发(包含iOS和Android转型)
  9. JQ 实现倒计时效果
  10. H5的Notification特性 - Web的桌面通知功能