零零碎碎的东西总是记不长久,仅仅学习别人的文章也只是他人咀嚼后留下的残渣。无意中发现了这个每日一道面试题,想了想如果只是简单地去思考,那么不仅会收效甚微,甚至难一点的题目自己可能都懒得去想,坚持不下来。所以不如把每一次的思考、理解以及别人的见解记录下来。不仅加深自己的理解,更要激励自己坚持下去。

补间动画

补间动画是根据我们设置好的view起始形态与终止形态,通过插值器与duration(时长)自动计算出中间view的平滑变化而实现动画效果。

补间动画有TranslateAnimation(平移)、ScaleAnimation(缩放)、RotateAnimation(旋转)、AlphaAnimatio(渐变)四个类,这些只是很基本的四种动画效果,如果我们需要在此基础上更为复杂的动画效果,可以继承这四个类进行装饰。

一般情况下我们都是在xml文件中定义补间动画,属性设置大致有起始值、终止值、时长(duration)、插值(interpolator,即动画的变化速度,加速、减速、匀速、抛物线速度)四个属性,四种动画效果的标签---translate、scale、rotate、alpha。具体属性设置及意义如下:

<!--平移--><translate<!--水平方向、竖直方向初始的view位置-->android:fromXDelta="0%"android:fromYDelta="0%"<!--水平方向、竖直方向终止点的view位置-->android:toXDelta="100%"android:toYDelta="100%"<!--动画持续时间-->android:duration="@integer/animation_duration"/><!--缩放--><scale<!--水平方向、竖直方向初始的view缩放大小-->android:fromXScale="0.5"android:fromYScale="0.5"<!--水平方向、竖直方向终止点的view缩放大小-->android:toXScale="1.0"android:toYScale="1.0"<!--指定缩放中心点的坐标-->android:pivotX="50%"android:pivotY="50%"<!--动画持续时间-->android:duration="@integer/animation_duration"/><!--旋转--><rotate<!--起始旋转角度-->android:fromDegrees="0"<!--终止旋转角度-->android:toDegrees="1800"<!--旋转中心点-->android:pivotY="50%"android:pivotX="50%"<!--动画持续时间-->android:duration="@integer/animation_duration"/><!--渐变--><alpha<!--起始透明度-->android:fromAlpha="1"<!--终止透明度-->android:toAlpha="0.5"<!--动画持续时间-->android:duration="@integer/animation_duration"/>
复制代码

java代码设置

Animation animation = AnimationUtils.loadAnimation(this, R.anim.activity_open_enter);
animation.start();
imageView.setAnimation(animation);
复制代码

属性动画

属性动画更为强大。补间动画只能自定义两个关键帧在旋转、位移、缩放、透明度四个方面的变化,而属性动画可以定义任何属性的变化。另外,补间动画只能对UI组件执行动画,但属性动画几乎可以对任何对象执行动画(不管它是否在屏幕上显示)。

属性动画有三个关键的类---ValueAnimation、ObjectAnimation、AnimationSet

ValueAnimation

属性动画主要的时间引擎,负责计算各个帧的属性值。它定义了属性动画绝大部分核心功能,包括计算各帧的属性值,负责处理更新事件、按属性类型值控制计算规则等。

ValueAnimation创建动画步骤:

  • 使用ValueAnimation的静态方法ofInt()、ofFloat、ofObject()创建ValueAnim实例。
  • 通过setXxx()设置动画持续时间、插值方式、重复次数等
  • 调用start方法启动动画
  • 上面三个步骤仅仅是计算出了各个帧的属性值,我们需要注册AnimationUpdateListener监听器,在监听器中监听ValueAnimation计算出来的值的改变,应用到指定对象上
ValueAnimator valueAnimator = ValueAnimator.ofInt(0,100);valueAnimator.setDuration(1000 * 3);valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {//获得变化的属性值int time = (int) animation.getAnimatedValue();...//对指定对象进行属性值更新操作}
});
复制代码

一般来说,ValueAnimation、本身并不显示任何动画,它更像是一个数值计算器。通过ofXxx方法指定计算类型,通过steXxx方法设置计算中值的变化方式,产生一段有规律的数字,让开发者自己为指定对象动态的设置属性。

ObjectAnimation

ObjectAnim类继承了ValueAnimation类,可以直接将ValueAnimation计算出来的值应用到指定对象的指定属性上。

ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, "translationX", 0,500);
animator.setDuration(2000);
animator.start();
复制代码

ofFloat方法与ValueAnimation中不同的是第一个参数是执行动画的对象,第二个参数是需要操作的属性,后面是一个可变长数组,表示属性值的起始于终止值。

第二个参数需要操作的属性在第一个参数对象中需要有get和set方法。ObjectAnimation内部是通过反射机制获得set方法动态的设置对象属性。可以直接使用的的属性有:

  • translationX、translationY:这两个属性作为一种增量来控制着View对象从它布局容器的左上角坐标开始的位置。
  • rotation、rotationX、rotationY:这三个属性控制着View对象围绕它的支点进行2D和3D的旋转。
  • scaleX和scaleY:这两个属性控制着View对象围绕它的支点进行2D缩放。
  • pivotX和pivotY:这两个属性控制着View对象的支点位置,围绕这个支点进行旋转和缩放变换处理。默认情况下,该支点的位置就是View对象的中心点。
  • alpha:它表示View对象的alpha透明度。
  • x、y:这是两个简单的实用的属性,它描述了View对象在它的容器中最终的位置。

AnimationSet

那么多炫酷的动画,当然不可能只是靠单一一个ObjectAnimation来实现的,这就需要多个ObjectAnimation进行组合,就需要AnimationSet类了。

AnimatorSet animatorSet = new AnimatorSet();
ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageView, "translationX", 0,500);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(imageView, "translationX", 0,500);
ObjectAnimator animator3 = ObjectAnimator.ofFloat(imageView, "translationX", 0,500);
ObjectAnimator animator4 = ObjectAnimator.ofFloat(imageView, "translationX", 0,500);
animatorSet.play(animator1).after(animator2).with(animator3).before(animator4);
animatorSet.setDuration(2000);
animatorSet.start();
复制代码

AnimationSet的play方法表示播放当前动画,其余还有组合方法:

  • after(Animator anim) : 将现有动画插入到传入的动画之后执行。
  • after(long delay):将现有的动画延迟指定的毫秒后执行。
  • before(Animator anim):将现有的动画插入到传入的动画之前执行。
  • with(Animator anim):将现有的动画和传入的动画同时执行。
  • playSequentially(Animator... items):表示按顺序执行这些动画.
  • playTogether(Animator... items);表示这些动画一起执行.

区别

  • 属性动画在补间动画的基础上定义了更多高级的功能
  • 补间动画只能对UI组件执行动画,但属性动画几乎可以对任何对象执行动画,不管它是否显示在屏幕上
  • 最重要的一点:补间动画只是在视图层次进行了改变,对象的属性并没有改变。而属性动画是真正的改变了属性值,根据设置动态的属性值实现动画效果。一个很好的例子就是一个图片在采用补间动画进行平移后,点击平移后的图片是不会有点击事件发生,点击平移前的位置会有点击事件发生(虽然执行动画后这里看起来什么也没有)。而属性动画则会对新位置响应点击事件。

每日一道面试题(第7期)---Android补间动画与属性动画的区别相关推荐

  1. android 属性动画 补间动画,每日一道面试题(第7期)---Android补间动画与属性动画的区别...

    零零碎碎的东西总是记不长久,仅仅学习别人的文章也只是他人咀嚼后留下的残渣.无意中发现了这个每日一道面试题,想了想如果只是简单地去思考,那么不仅会收效甚微,甚至难一点的题目自己可能都懒得去想,坚持不下来 ...

  2. android 从底部网上的平移动画_Android属性动画,看完这篇够用了吧

    转载自作者新小梦 随着APP的开发周期演进,APP不再满足基础的功能保障,需要有较好视觉体验和交互操作.那么动画效果是必不可少的,动画有帧动画,补间动画,属性动画等等. 本文通过一些简单常见的动画效果 ...

  3. android组合动画还原,Android - Fragment,View动画,组合动画,属性动画

    转载请注明出处:https://blog.csdn.net/mythmayor/article/details/72876871 1.什么是Fragment 片段,碎片 * 从Android 3.0 ...

  4. android 属性动画还原,属性动画和补间动画

    动画的分类 今天我们将会探讨动画的学习,Android的动画分成三类 1. Tween Animation(补间动画.视图动画):通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生的动画效果,即 ...

  5. Android开发笔记(九十六)集合动画与属性动画

    集合动画AnimationSet 补间动画有四大类:透明度动画AlphaAnimation.旋转动画RotateAnimation.缩放动画ScaleAnimation.平移动画TranslateAn ...

  6. Android -- 三种动画(帧动画、View动画、属性动画)

    Android的动画分为了三种, 分别是 帧动画.View动画.属性动画 一:帧动画 帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放. 帧动画的使用很简单,总 ...

  7. Android动画(帧动画、补间动画、属性动画)讲解

    Android动画(帧动画.补间动画.属性动画)讲解 首先我们来看看啥是帧动画.补间动画.属性动画. 介绍: 帧动画:是一种常见的动画形式(Frame By Frame),其原理是在"连续的 ...

  8. Android平移补间动画,Android 补间动画之平移动画TranslateAnimation

    Android动画系列 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平移动画的简单介绍. 2.属性 duration 时间 f ...

  9. android属性动画替换逐帧动画,Android 动画:逐帧动画,补间动画和属性动画

    1.三种动画的介绍 现在 Android 常用的动画有三种: 逐帧动画,补间动画和属性动画: FrameAnimation(逐帧动画):将多张图片组合起来进行播放,很多 App 的加载动画是采用这种方 ...

最新文章

  1. Java8 stream filter map
  2. Java中ArrayList最大容量为什么是Integer.MAX_VALUE-8?
  3. amchart折线图示例
  4. 深入详解windows安全认证机制ntlmKerberos
  5. [云炬创业基础笔记]第二章创业者测试22
  6. Tensorflow2.0 + Transformers 实现Bert FGM对抗训练惩罚梯度损失函数
  7. ab753变频器参数怎么拷贝到面板_技术贴:100吨连铸安川变频器的更换
  8. 傅里叶变换进行缺陷检测detect_indent_fft.hdev(源代码与详细解析)
  9. postgresql成本因子调整
  10. 运筹学作业(一)——线性规划
  11. java数字时钟代码,[Java教程]Javascript 数字时钟
  12. android: 动态加载碎片布局的技巧
  13. 软件开发中的三个真相 以及如何应对
  14. GEE:快速下载数字高程DEM数据
  15. 高并发时代下的设计模式-GO和JAVA的对比
  16. 对于网络文学而言 计算机叙事,【网络文学论文】传统文学中网络文学特征研究(共4573字)...
  17. VB操作EXCEL表的常用方法
  18. 5G移动通信技术基本介绍(附92页PDF下载)
  19. SpringBoot 启动报错 No property found for type !
  20. icloud连接服务器时出现问题_icloud连接服务器失败怎么办-互盾苹果恢复精灵

热门文章

  1. 36万类别、1800万图像,国内机构创建全球最大人脸数据集
  2. SAP RETAIL WRMO 补货监控
  3. SAP PM 初级系列16 - 设备相关的Asset号
  4. 越是富人,越重视子女教育
  5. 美专家:中国的机器人优势所引发的忧虑
  6. 人工智能进阶-CIFAR-10数据集介绍
  7. 基于PaddlePaddle的机器翻译教程 | 深度学习基础任务系列
  8. 人工智能将如何改进物联网?
  9. SAP WM 如何理解使用LT0G撤销TO时系统出现的锁的标志
  10. 业界丨《自然》:中国打响AI人才争夺战