Android动画--属性动画--基础
来源:互联网 发布:阿里云盘免费吗 编辑:程序博客网 时间:2024/05/18 03:04
动画,自己一直觉得挺难的,其实心里一直觉得越是酷炫的效果就会越难,所以自己也没想过去涉足,今天算是自己正式进入动画世界吧……
在此依然是感谢前辈们,没有前辈们的辛苦挖坑种树,哪还有我们的乘凉地!
3.0之前已有的动画框架–了解
逐帧动画(frame-by-frame animation)和补间动画(tweened animation)。
Frame Animation(逐帧动画)的工作原理很简单,其实就是将一个完整的动画拆分成一张张单独的图片,然后再将它们连贯起来进行播放,类似于动画片的工作原理。
Tween Animation(补间动画)是对某个View进行一系列的动画的操作,包括淡入淡出(Alpha),缩放(Scale),平移(Translate),旋转(Rotate)四种模式.
1:Tween Animation(补间动画)只是针对于View,超脱了View就无法操作了,这句话的意思是:假如我们需要对一个Button,ImageView,LinearLayout或者是其他的继承自View的各种组件进行动画的操作时,Tween Animation是可以帮我们完成我们需要完成的功能的,但是如果我们需要用到对一个非View的对象进行动画操作的话,那么补间动画就没办法实现了。举个例子:比如我们有一个自定义的View,在这个View中有一个Point对象用于管理坐标,然后在onDraw()方法中的坐标就是根据该Pointde坐标值进行绘制的。也就是说,如果我们可以对Point对象进行动画操作,那么整个自定义的View,那么整个自继承View的当前类就都有了动画,但是我们的目的是不想让View有动画,只是对动画中的Point坐标产生动画,这样补间动画就不能满足了。
2:Tween Animation动画有四种动画操作(移动,缩放,旋转,淡入淡出),但是我们现在有个需求就是将当前View的背景色进行改变呢?抱歉Tween Animation是不能帮助我们实现的。
3:Tween Animation动画只是改变View的显示效果而已,但是不会真正的去改变View的属性,举个例子:我们现在屏幕的顶部有一个小球,然后通过补间动画让他移动到右下角,然后我们给这个小球添加了点击事件,希望位置移动到右下角的时候点击小球能的放大小球。但是点击事件是绝对不会触发的,原因是补间动画只是将该小球绘制到了屏幕的右下角,实际这个小球还是停在屏幕的顶部,所以你在右下角点击是没有任何反应的。
Android 3.0版本开始推出新的动画框架
Google在Androi3.0的时候推出了一种全新的动画模式,属性动画(property animation),它的功能非常强大,弥补了之前补间动画的一些缺陷,几乎是可以完全替代掉补间动画了。因为属性动画框架操作的是真实的属性值,直接变化了对象的属性,因此可以很灵活的实现各种效果,而不局限于以前的4种动画效果。即:不止可以应用于View,还可以应用于任何对象,Property Animation只是表示一个值在一段时间内的改变,当值改变时要做什么事情完全是你自己决定的。
属性动画的相关属性
这些都还不用仔细研究,下面有具体的代码、详细的注释和效果图,那样更容易理解和记忆。在“混合使用–重点”部分
相关的类
ObjectAnimator 继承自 ValueAnimator,ValueAnimator继承自Animator
ValueAnimator
ValueAnimator是整个属性动画机制当中最核心的一个类,属性动画的运行机制是通过不断地对值进行操作来实现的,而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的。它的内部使用一种时间循环的机制来计算值与值之间的动画过渡,我们只需要将初始值和结束值提供给ValueAnimator,并且告诉它动画所需运行的时长,那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。除此之外,ValueAnimator还负责管理动画的播放次数、播放模式、以及对动画设置监听器等.
ObjectAnimator
继承自ValueAnimator的,底层的动画实现机制也是基于ValueAnimator来完成的,因此ValueAnimator仍然是整个属性动画当中最核心的一个类。那么既然是继承关系,说明ValueAnimator中可以使用的方法在ObjectAnimator中也是可以正常使用的
/** * 第一个参数要求传入一个object对象,我们想要对哪个对象进行动画操作就传入什么,这里我传入了一个textview。 * 第二个参数是想要对该对象的哪个属性进行动画操作,由于我们想要改变TextView的不透明度,因此这里传入"alpha"。 * 后面的参数就是不固定长度了,想要完成什么样的动画就传入什么值,这里传入的值就表示将TextView从常规变换成全透明,再从全透明变换成常规。 * 之后调用setDuration()方法来设置动画的时长, * 然后调用start()方法启动动画 */ //淡入淡出:从常规变换成全透明,再从全透明变换成常规// ObjectAnimator animator = ObjectAnimator.ofFloat(imageview, "alpha", 1f, 0f, 1f); //旋转:以中心为原点,旋转360度// ObjectAnimator animator = ObjectAnimator.ofFloat(imageview, "rotation", 0f, 360f); //平移:第四个参数为负时,将TextView先向左移出屏幕,然后再从左移动回来,为正数,向右移// float curTranslationX = textview.getTranslationX();// ObjectAnimator animator = ObjectAnimator.ofFloat(imageview, "translationX", curTranslationX, -500f, curTranslationX);// float curTranslationX = textview.getTranslationY();// ObjectAnimator animator = ObjectAnimator.ofFloat(imageview, "translationX", curTranslationX, 500f, curTranslationX); //缩放:TextView进行缩放操作,比如说将TextView在垂直方向上放大3倍再还原(垂直拉伸) ObjectAnimator animator = ObjectAnimator.ofFloat(imageview, "scaleY", 1f, 3f, 1f); animator.setDuration(5000); animator.start();
混合使用–重点
独立的动画能够实现的视觉效果毕竟是相当有限的,因此将多个动画组合到一起播放就显得尤为重要。
实现组合动画功能主要需要借助AnimatorSet这个类,这个类提供了一个play()方法,如果我们向这个方法中传入一个Animator对象(ValueAnimator或ObjectAnimator)将会返回一个AnimatorSet.Builder的实例,AnimatorSet.Builder中包括以下四个方法:
ObjectAnimator moveIn = ObjectAnimator.ofFloat(imageview, "translationX",0f, -500f, 0f);//平移 ObjectAnimator rotate = ObjectAnimator.ofFloat(imageview, "rotation", 0f, 360f);//旋转 ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(imageview, "alpha", 1f, 0f, 1f);//淡入淡出 ObjectAnimator scale = ObjectAnimator.ofFloat(imageview, "scaleY", 1f, 3f, 1f);//缩放 //动画组合,使用AnimatorSet类中的play()方法,AnimatorSet animSet = new AnimatorSet();animSet.play(rotate).with(fadeInOut).with(scale).after(moveIn);//向左移出再从左边移回来后,然后旋转的同时并淡出淡入animSet.setDuration(5000);animSet.start();
效果图–gif要在2M以内
监听动画
.addListener(new Animator.AnimatorListener() {重写全部方法;
.addListener(new AnimatorListenerAdapter() {重写指定的方法;
- Android动画--属性动画--基础
- android属性动画--基础
- Android属性动画基础
- android属性动画基础
- Android基础:动画三:属性动画
- Android动画之属性动画基础用法
- Android属性动画--基础使用
- Android属性动画--基础使用
- Android属性动画基础介绍
- Android属性动画基础(2)
- Android属性动画基础用法
- Android 属性动画基础,入门
- android动画基础(一) View动画和属性动画
- Android动画--属性动画
- android动画 -- 属性动画
- Android动画-属性动画
- Android动画【属性动画】
- Android动画--属性动画
- 【腾讯Bugly干货分享】React移动web极致优化
- Android的5种数据存储方式概述
- app.use()方法
- 第一天开通博客
- SDL显示一张图片
- Android动画--属性动画--基础
- PAT-B 1028. 人口普查
- Arduino模拟空调遥控器
- Python模拟进行Mysql和Redis数据传输总结
- kmp算法模板
- Drupal8模板中替换系统的jquery库
- 【腾讯Bugly干货分享】微信读书iOS性能优化
- LeetCode-21:Merge Two Sorted Lists
- 收集网站